Why does Unreal display bones the way it does? & rant

Good attitude.
But you also need to realize you are rendering in an engine that is very sub-par in terms of features offered compared to competitors, so what you can do gameplay wise, is more up to your c++/c# skills than it is to what the engine does.

Put a socket on the bone. Attach an arrow to the socket. See how it behaves.

Re the rest.

Look, IK is really not the droid you are looking for.

Make a dedicated hand object bone for your skeleton. Animate/use said bone.
Offhand gets one too.
Leave IK bones there for other (ik) stuff.

Other helpful additions are going to be a hat bone and a glasses bone.

Hand IK is used to adjust hand positioning. Not objects attached to it.

At a base level, all your animations will directly animate your objects.
Say you take off the hat, how else are you going to do so without a bone for it?
Say you do gun tricks, how would you get the gun to spin around an index finger without a bone for it?

The fact that the ik bone is used simply means that if you ever do use the bone, then throw the object out your hand, the hand will keep following the object. Instant fail / poor planning / poor understanding.

Given that, you just learned how to fish and skipped at least 2 iterations of re-doing things.

Other thing.
An Aim offset is math, with a really bad approximation. So do not expect the gun to point to centerscreen under the cursor.
The code you have running is probably a better idea.
However.
No one says the bullet needs to leave the correct line of the barrel, and save some slomo breakdown with extremely bad poses (barrel up in recoil shoots again anyway) no one will be able to see a bullet going off in a different angle below 5-10deg difference.
And those who do probably won’t care so long as you hit what you aim at.

Its a game, not real life. As much as making ■■■■ realistic is nice/better/preferred etc… well, let’s all remeber that people play fortnite…