In general, the way this works is very simple. Your characters have a list of bones, which are animated by the animation system. You renderer takes these animated bones and uses them to draw the mesh via skinning or some similar technique.
So you simply add an extra bone to the animation system. This bone is not weighted to any vertices; it's there solely to position objects your character carries. Typically, this bone is either a child of the animation root or a child of the hand.
When you execute your animation system and get the bone-to-object space matrices for each bone, you get one for the "extra" bone as well. Just use that as the transform for the object you want the character to "carry". If the animators and modelers did their jobs (animation must position and orient the bone correctly, modelers must build the mesh to fit the hands and center the object on the place where the character will hold it), then the object will appear in the character's hand.