It’s almost always better to animate in place.
You can actually move the root bone and animate it, but its either discarded on import or it will cause issues.
Normally. Animate the root bone, so you have whatever movement you need.
Let’s say walking.
You set the root bone up to scroll through at the distance that maches the meters per second used in unreal.
Off that, you create the walk cycle so that the feet look nice, and you have no sliding.
After that, you just delete the root bone translation keys off the animation track.
This brings the animation back to being the exact walk cycle you crafted - which will work perfect with the speed you have set in the character movement - but it will be in place. Like all the other usual animations.
When you need to animate the root bone for root motion stuff, you can always create a quick script to move the Armature following the root bone and keyframe its location/rotation data.
I think - have not done this in a bit because unreal mostly su cks right now - that you still have to clear the root bone translations before exporting though.
Since that bone isn’t really used.
As far as what is happening in blender.
The exporter is literally seeing the thing called Armature and saying… ha use the object location and skip the root bone within.
At least, that’s what I remember form the last time I updated my curves export script.
By now it’s probably been over a year. I may remember wrong.