If you're using the PIDController class in WPILib, instead of using the motor as a PIDOutput directly, we have used an intermediate class that checks to see if the motor is being manually overriden, and if so to not allow the PID controller to send output to the motor. Something like..
Code:
void PIDWrite(float output)
{
if (!m_motor_overridden)
m_motor.Set( output );
}
This year we're using the CAN mode of the Jaguars, and you can switch control modes from position mode to manual mode, and back. However, we didn't get enough testing time, and we had a bit of trouble getting the position mode to work [even just by itself, without the manual mode] because of what we suspect may be a faulty encoder... so we'll be playing with that soon before our competition in April. But we have shown that you can successfully switch modes.
We also have limit switches hooked up to prevent our arm from traveling too far.