In fixed function openGL, you can only have 8 lights. You can get around this by setting up different lights for different pieces of geometry before you render them - we tried this and it works, but you get all sorts of ugly splits in the lighting where it changes from one chunk of a build to another. Also the overhead of searching for nearby lights starts to add up - the data structure might have to be refined or replaced.
With shaders, we're calculating our own lighting values with some vector calculations. So you can theoretically have as many as you want to calculate. The problem is glsl shader compiling is done by the driver, so the compatibility between cards is stuff. It took quite a bit of fiddling just to get something that would work most places, including some insane stuff like the unrolled lighting array because some drivers just can't do arrays or loops for no reason.
I'd have to make a script that would piece together the shader based on your settings and what kind random failings your card/driver has and that sounds like a big pain in the ass.