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 control position. To position it smoothly around surface - enable **Snapping > Face with Align Rotation to Target**. 

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

To prevent appearance on other side use Empty's Z coordinate and clamp it with like *Less Than* node and use it as a mask for back part of a mesh.

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


  [1]: https://i.sstatic.net/ACoXc.gif
  [2]: https://i.sstatic.net/0HS20.png