Once the rig is setup, you have the full control of your characters in run-time to procedurally animate during game play. To achieve this, just add demands for the position and the orientation tasks
mRightHandTask->setTarget(positionRH.x, positionRH.y, positionRH.z);
mRightFootTask->setTarget(positionRF.x, positionRF.y, positionRF.z);
mHeadTask->setTarget(headOrientation.x, headOrientation.y, headOrientation.z, headOrientation.w);
To animate on top of your animation, the demands could be computed as an offset on top of the original animation, for example
positionLH = animationLHPosition + offsetLH;
headOrientation = animationHeadOrientation * offsetHead;
where offsetLH is a vector that is computed in the game based on the demanded behaviour. This offset, in most cases, is a time-space demand that changes with time. The same applies to offsetHead.
You might also decide that some of the constraints are directly defined in world space without any offset from the source animation, for example head orientation.