To fix your issue with the origin of your players shoot has to do with:
fire.x = GirlHero.x;
fire.y = GirlHero.y;
You are right. the registration point will be an issue. To fix this use an if statement much like your moveBullet2 function.
if (GirlHero.currentLabel == ('left')){
fire.x = GirlHero.x + leftXOffset;
fire.y = GirlHero.y + leftYOffset;
}else if (GirlHero.currentLabel == ('right')){
fire.x = GirlHero.x + rightXOffset;
fire.y = GirlHero.y + rightYOffset;
}
The offset values will need to be played with based on you character.
For you bullet shooting problem.
your MoveBullet2() function is updating direction of you bullets while they are in the air. Once a bullet is shot, you do not want to change its direction.
Instead in your myBullet2 Class (or in code inside myBullet2 MovieClip) create variables rads and rotation. Then set them when you create a bullet. Then in your moveBullet2() youd have:
var b:myBullet2 = myBullet2(e.currentTarget);
b.x += Math.cos(b.rads) * speedd;
b.y += Math.sin(b.rads) * speedd;
and where you create bullet would add:
fire.rads = rads;
fire.rotation = rot;
which these values would be based on the direction character facing and where the mouse was pointing.