One thing is (as you can see) *UV Projection* modifier generates smaller image in front side to closer camera and bigger image on opposite side due conical shape of projection from point - so distance of camera matters. 

In this case I would suggest to use *Texture coordinates >* **Object** and use another object like *Empty* to controll position. To position it smoothly on surface - enable **Snapping > Face with Align Rotation to Target**. 

[![enter image description here][1]][1]
[![enter image description here][2]][2]

But that is not your Q. This doesn't eliminate appearance on other side ... that is common issue with projection. If you want to stay vertex (UV) independent ... I know only this [Rich Sedman's OSL shader][3] (if you dont mind it is only CPU computation) that projects only in front direction.

In theory, since you can manipulate vector coordinates, there should be a way to math something ... since Z rays are endless it cant be cropped by some distance, but probably it could be scaled on XY to zero at some Z distance?


  [1]: https://i.sstatic.net/qlor7.png
  [2]: https://i.sstatic.net/Vz9Nf.png
  [3]: https://blender.stackexchange.com/a/121372/2214