makevectors takes eular angles (pitch, yaw, roll) and sets v_forward, v_right, and v_up to that position.
the result is actually a 3*3 matrix (often refered to as an 'axis set', or axis for short despite the issues with plurality).
skel_set_bone sets a bone's relative position to the v_forward/v_right/v_up orientation, along with the offset passed to the command.
note that this is a RELATIVE position, thus you need to consider the parent position too, and this will also affect the bone's descendants too.
the angle passed to makevectors beforehand will be the angle of the bone relative to the angle of the bone's parent. any animation info for this bone will be _completely replaced_.
skel_mul_bone (and skel_mul_bones) will rotate the bone by the arguments without destroying any information.
makevectors('0 5 0') beforehand will rotate that bone (and its decendants) by 5 degrees around the vertical, from its prior position, regardless of what it was.
makevectors('0 0 0') will result in the identity matrix. rotations by the rotation matrix will of course do nothing.
skel_set_bone_world sets a bone's position to an actual world position for the bone. if you want to put a single bone in a specific place, you can use this builtin to put it there. note that this is not inverse kinematics, and that the skeleton stays relative. so if you're updating a whole bunch of bones with this builtin (because you wrote your own IK), start with the root and work through to the leafs. :s
you can use gettaginfo in order to read a bone's world position.
So, back to your problem...
if you have a spine with 4 bones, you can use skel_mul_bones with a yaw angle of (mouseangle_y-toonangle_y)/4 to affect all 4 bones in a single call with a vaugely smooth curve.
make this call after skel_build, so that you don't destroy any animation data/it doesn't get overwritten aka ignored.
Yes, I hate matrix multiplication too.