You can use a cell picker to convert display coordinates to world coordinates. We tried this in the redesigned widget infrastructure in Slicer and it works so well (you can place and slide points on surfaces) that we kept this as the default behavior. You should be able to do this with standard VTK widgets, too.
You can set your own picker in VTK widgets or picking manager and configure it to pick only on the surface of a certain actor.