I'm not sure I understand the exact problem, but it's interesting enough. Here's how I'd go about it.
Every light source has a given brightness. The basic idea is that a light ray scatters, and therefore its brightness decreases, as it is further removed from the light source. If you use ray tracing, divide the light source's brightness by the light source's radius to obtain the standard brightness decrement for a fully transparent square (I'm assuming the loss in brightness is linear to distance).
Now initialize a 'lumen' array to all zeroes (darkness). For each light source, trace rays outward from the light source to cover each square in its radius. For each square, increase the square's brightness value by the light ray's brightness. Lower the ray's brightness by its standard decrement (as above) multiplied by the relative transparency of the square. Then move outward one more square and increase the next square's brightness value by the light ray's remaining brightness. Continue until the ray's brightness hits zero. For mirroring, deflect the light ray by the angle with which it hits the surface of the mirror, and continue as above.
So if you have a circular ray trace and a method to deflect rays;
Initialize all Square.Brightness = 0
For each LightSource
DeltaBrightness = LightSource.Brightness / LightSource.Radius
Ray.Brightness = LightSource.Brightness
For each square outward, repeat
Square.Brightness = Square.Brightness + Ray.Brightness
Ray.Brightness = Ray.Brightness - DeltaBrightness * (Square.Transparency / 10000)
until Ray.Brightness <= 0
Different rays coming straight from the same light source should not increment a square's brightness more than once. Rays coming from different light sources, as well as reflected rays, should further increase a square's brightness.
Hope this helps.