You're looking for something like a Catmull Rom spline. The reality is that the math just isn't all that hard to deal with (some vector-matrix multiplications). My recommendation is that you just implement the spline that you really need in code.
Quoting from that article:
The points that define a spline are
known as "Control Points". One of the
features of the Catmull-Rom spline is
that the specified curve will pass
through all of the control points -
this is not true of all types of
splines.

To calculate a point on the curve, two
points on either side of the desired
point are required, as shown on the
left. The point is specified by a
value t that signifies the portion of
the distance between the two nearest
control points.
You should be aware, though, that the Catmull-Rom spline can lead to little loops at the control points if they are too close together when they need to take a tight turn.
Looking at the image above, imagine that p1 and p3 were right next to each other, below p2 (basically compressing the right hand side of the picture). It's likely that a Catmull-Rom spline would come down from p0, pass through p1 as it does now, go up the right side of p2 and pass through it from right to left, coming down the left hand side and passing left to right through p3.
This is a consequence of the construction of the spline.
It's sort of like working with fairly stiff flexible pipe (like I have under my sink). In order to get a longish piece to connect to points that are close together, I have to add a loop.