Sure no worries.
Yes, as long as you keep track of the directional keys’ down states it should be perfectly fine to query their combined states at any given time (in effect what I did in the function UpdateMovementDirection()).
As for the bullet direction, yes, if you also implement the direction vector part then you can easily use that for setting the bullet’s velocity - just be careful to normalise the vector first (I had a specific movement working off this where I did not want the direction vector to be normalised). E.g. FVector(1.0f, 1.0f, 0.0f) is not normalised, so if you want to consistently set the bullet velocity you’ll need to do something like:
FVector aimDir = FVector(1.0f, 1.0f, 0.0f);
aimDir.Normalize();
float requiredBulletSpeed = 500.f;
FVector bulletVelocity = requiredBulletSpeed * aimDir;
As for the sockets, I’m not 100% following what your setup is like but have you had a look at Aim Offsets? Seems it might be what you’re looking for.