There are several ways to achieve what you see, depending on how you want him to behave. I will explain some of the simpler methods for modifying a Bezier curve through a curve manipulation point.
The first thing to do is find out the value of the parameter (t), where the user clicked on the curve. This will usually be an approximation. If you are performing pixel or subpixel rendering on a Bezier, then just write the value of t for each pixel and use it. If you are tessellating into line segments, look at which line segment is closest, find the t values ββof the two endpoints, and say the value t according to the distance along the line.
Once you get the value of t, you can connect it to the equation of the Bezier curve. You will get something like a form:
P = k0*P0 + k1*P1 + k2*P2 + k3*P3
where P is a point on the curve, P0, P1, P2 and P3 are input control points, k0, k1, k2 and k3 are constants for a given t. I will call the contribution "k", or, more specifically, the contribution of control points to a point on the curve P (t). A good property to remember is that k0 + k1 + k2 + k3 = 1.
So, let's say you have a vector V = P '- P, where P' is the new position and P is the starting position. We need to move some control points to get P 'where it is needed, but we have some flexibility regarding which of the control points we want to move. Any point with a nonzero contribution can be used or some combination.
Say the user clicks on the curve at t = 0. In this case, only k0 is nonzero, therefore
P0 := P0 + V
will lead to the correct result. It can also be written as
P0 := P0 + k0 * V
In the general case, when all contributions are nonzero, you can apply the same transformation to each of the points, which will have the effect of a very smooth, stretched deformation.
Another option is to simply move the control point with the maximum contribution over the entire distance. I think the equation used would be something like
Pmax := Pmax + 1/kmax * V
but in any case, it comes down to considering the contributions at a given value of t and moving the control points so that the new point is in the right place.
This approach is pretty general and works for NURBS and most other splines, even surfaces. There is another method that is quite common when using Greville Abscissae, which connects as many points as possible, but, in my experience, it is too easy to get vibrations.