This python script, as the title implies, will allow you to loosely project a curve onto a surface. The resulting curve will have the same amount of control points as the input curve. It will also produce a partial curve, if some of the control points of the curve miss the surface.
Normally when you project a curve onto a surface, Rhino will build a new curve that follows the surface within your document absolute tolerance. This means that the curve will have many more control points than the original curve, as can be seen in the image below: