Related to that is that objects overlapping create overlapping shadows. Which makes sense considering how your render engine seems to work.
Might I suggest instead of a solution in real time, how about a static deal that essentially generates a lightmap to overlay on top of the scene? I can think of several uses for that.