Wow, all of a sudden I'm getting a lot of questions about this. I guess I need to make a clearer example that explains all the magic and strangely configured joints. :-\
1) cpBodySlew() calculates a velocity so that an object will move to the desired point in the next timestep. You don't quite want that, you need a maximum speed. Pull the calculation out of cpBodySlew() and clamp it like this:
body->v = cpvclamp(cpvmult(cpvsub(desiredPosition, body->p), 1.0f/dt), maxSpeed);
I'm seriously considering removing cpBodySlew() function in the next version because it causes so much confusion for a trivial one line function.
2 & 3) You shouldn't have to no. Setting the pivot joint's biasCoef to 0.0 should cause the joint to ignore position error and only work on the velocity. The code you pasted to initialize the bodies and joint looks correct though. I'm not sure what to tell you unless you can make a patch for the tank demo to reproduce the problem. I have no idea what the problem would be.
Maybe part of the problem is just that mass of your body is so low and the maxForce is so high? In the tank demo, the mass/force ratio is 10/1000. You are using 1/10000. I guess I would try that.
4) The gear joint is only if you want rotation. If you don't want rotation, you probably want to give your body an infinite moment of inertia so that it can't rotate at all. Actually having such a low moment of inertia might be causing some of the problems here.