A display list is just a series of containers. These containers can hold assets or other containers. All together they create a hierarchy of parents, children, siblings (as well as grandparents, grandchildren, ancestors etc.) Think of it like any operating systems folder structure. When you drag a folder to a new location, all of its contents go with it.

Your weapon is a container and calls to addChild within that container add children assets to Weapon. Where weapon goes, so must its children. While that might make conceptual sense, we have to think of our games as overlapping systems. There's the background graphics system, the player, the enemies, projectiles, visual effects, UI and so on.

While all these systems might have their respective logic, we need an overall manager that knows about (and usually creates) each system and how they work. That manager should listen for the mouse click, locate the tip of the gun, create a new bullet instance at that coordinate and then on tell that bullet to update itself at a regular interval (game tick) usually done with enter_frame events.

There are global methods call localToGlobal() and globalToLocal() that will convert the x,y coordinates from local space to global or global space to local which will help place an instance at the exact same spot as another asset without having to be a child or sibling of it.