The “big problem” is easy to solve.
With this node tree, the camera sees the texture differently from what is used to light the scene. In other words, you can tune the lighting to add more contrast and more power without changing the background which will be seen in the render.
If you want to keep the environmental texture the same than what is seen by the camera in other situations, like for the reflections, for example, use a Math node (or several) to add all the outputs from the Light Path node that you need.
And if tuning the environmental texture isn’t enough, just add emitting planes in front of the brightest areas. Set them invisible to the camera and that’s it. (Object tab, Ray Visibility panel.)
Now, projecting shadows… That’s even more simple: No can do! The environment texture isn’t an object. Besides, since it represents some 3D environment beyond the real objects, Blender would have to re-build the geometry of what you see. I think you’ll have to wait a few years before to see the needed AI in Blender…
I saw a very impressive add-on capable of re-building the geometry from a flat image… with some help. But, even with its help, it would be tricky to re-position the generated objects so that they occlude perfectly their counterparts on the environment texture. Not totally impossible but you’ll have to feed a lot of energy bars to your OCD secondary personality.