first idea to come to mind is instead of going through each tile for each light, you start at the lights center, and expand in a circle around the tiles of the light, until you've hit all walls in all directions for the light, or at least until the light value for each particular direction is withing whatever threashold you need(essentially a Dijksta algo).
Dijksta in this case sounds like an interesting approach. However, it did lead me to think about using a simple flood-fill algorithm alongside the ray-casting. All the tiles beginning from the light will be filled and dissolve with greater distance. Along with the ray-casting, it would lead to an instant check if there is an initial blockage.
Thanks for the brain storming! I'll reply with any results.