Scenecomponents auto set mobility to movable, the chain of inheritance goes ActorComponent->SceneComponent(sets movable)->PrimitiveComponent(hides movable category from BP)->SkeletalMeshComponent.
Technically I don’t have to set mobility in the static mesh component either since it is already defaulted to true. By default all primitive components hide the Mobility category, Epic specifically goes in with static mesh components and shows it again so it can be set in blueprint " ShowCategories=(Mobility)".
In the template, literally just adding a GrippableSkeletalmeshActor, setting it to the gun and applying its physics body, it will pick up and work fine. There are also several users that ONLY use skeletal meshes for grips in their games.
For where the rotation and location are applied, it is on TickGrips in the motion component, it pre-calculates some transforms and then applies movement logic to the held objects (unless a custom grip type, then it sends an event off to the object to handle it, itself).
GrippedBoneName is set if the trace hits and the object is set to be per bone grippable in the template, otherwise it just grips as the actor itself (root bone).
OptionalSnapToSocketName is kind of legacy at point as it is less flexible, directly passing in the calculated socket transform is better as it allows controller profile editing and some other things, at some point I will remove it, but it still “works” fine for singleplayer.