Targetting the Gun_root's Child Of constraint to a mesh object's vertex group isn't going to work because the only information it will accurately get from this is a position offset. Rotation will be unpredictable.
A vertex group only stores geometry data, not the full transformation (location, rotation, scale) of a bone. Bones carry pose information that directly affects an object's position and rotation, while vertex groups only affect geometry assignment and don't properly inherit bone transformations, leading to unexpected behavior when animating the hand.
A better target would simply be the c_hand_ik.r bone.

The result will be way more normal:

It actually works well when I make the hand a "child of" the gun and only animate the gun. Though, the problem with this approach is that I only animate the gun and would have to additionally export the arms' animation. So I guess the way I do it now is easier/faster because the only thing I really have to animate on the gun is the slide, and that's only for the shoot animation.
Unless you do strictly nothing with the gun, you will always have to export the animation of both rigs, no matter what. And personally, I would probably never let the gun be perfectly still, there's always a bit of movement from the fingers, the gun itself, changes in the grip, ... It would feel very stiff if the gun is just stuck to the hand with nothing else. And on top of that, there are the gun parts that might move too. So I wouldn't really ever have "nothing" animating that rig, and thus would never escape the animation baking and exporting.
When it comes to the relationship direction, in theory (and assuming you do animate the gun), you can have the relationship made in either way:
What it will change is how you will animate and interact with the controllers to get what you want. The final results should be baked into keyframes and exported for both rigs regardless. So in practice, do whatever feels more comfortable and efficient to you. Which might change from one prop to another, from one animation to another, sometimes even within the same animation! (Child Of constraints can have their influence animated, so to dynamically change parents over time).
On a side-note:
You don't have a fixed point of attach, which means both in Blender and the engine, each time you parent the two, you will also have to then manually add an offset to position the gun correctly in the hand (on top of that you might have some animation which might change the required initial position from one animation to another).
You could have two bones for the whole gun: One which will be parented to your rig in game predictably (I.E a bone whose default position/rotation/scale is exactly the hand bone's), and one which is child of the formed and offsets the whole gun and will be actually the one carrying the whole gun's animation. But it's inevitably heavier.
Or you could have the whole gun rig world-centered, leave the gun root bone there and have the gun offset bone carry the offset up to the hand, this way in engine you just parent the gun rig to the character rig instead of the hand.
Both leave total freedom of the gun positioning to the animator.
You can of course keep things as they are right now and have the offset done manually in the game engine. It's up to you to see how you prefer to deal with this kind of problematic, and it also depends on how many other props and characters you have.