I also did this in a tilemap your size, so far I have been checking which tiles are visible (+ some more offscreen for more distant lights), drawing those, and clearing the list every time (300+ hulls). This is not very effective ofcourse as it produces
a lot of garbage and framerate drops for slower computers.
This was not my highest priority since I'm still in Alpha development phase and just wanted to see what I could do with the engine. (got an AMD six core 2,8 gHz + 8GB ram anyway xD) So I have done little in working my way around this.
Before I continue I'd want to say that I'm just an amateur developer, but I think your nr. 1 might be a good idea based on my experiences. Krypton handled my way of 'screwing around' very well plus the calculations are done every frame anyway, whether you
recreate the hulls or not.
What you do have to watch out for is that you should never have more than 1000 hulls, this will not only cause your game to lag it'll freeze. So you have to take in account.
I don't know how large your sections would be or how much hulls will be on them. But I work with a 1920*1080 monitor on fullscreen and already have 300+ hulls per frame. If you render 8 sections (Your game is top-down btw??) There'd be 2400 hulls, way too
much. This wouldn't be a problem if you worked with a 500*500 viewport ofc, then there would be something like 30 hulls per section so 240 hulls in 8 sections.
What would be really awesome is that you would have a 2d array, and you check which array[x,y]; would need to be rendered by Krypton, Krypton does not support this by default but you (we) could try to put open-source into practice and change the code so
it does work. Bye-bye garbage.
I hope this helped you in some way. :)