En Flex (ActionScript), comme dans tous les langages compatibles EcmaScript, lorsqu'un événement est émis depuis un composant, il va être propager entre différents objets, en suivant trois phases : capture, target et bubbling.
Imaginons l'événement clic sur un bouton, durant la phase de capture cet événement va traverser tous les composants et conteneurs parents du bouton en commençant par l'objet application avant d'atteindre le composant émetteur de l'événement. La phase "target", est justement la phase au cours de laquelle l'événement a atteint son émetteur. Enfin la phase de "bubbling" à renvoyer l'événement vers l'objet application en lui faisant prendre le chemin inverse de la phase de capture. Vous trouverez un certain nombre d'exemple dans cet article de la livedoc d'Adobe.
Ce mécanisme est très pratique car il me permet de factoriser des comportements identiques entre différents composants. L'exemple classique est celui d'un conteneur avec différents composants sur lesquels on souhaite effectuer des opération de drag&drop, plutôt que d'implémenter ce comportement identique sur chaque composant, il sera codé au niveau du conteneur dans un listeneur (handler) abonné au bons types d'événements.
Et les popups alors ??
Les popups sont créées via PopupManager.createPopup() et s'intègrent de la
manière suivante dans l'arbre des objets flex : 
Du coup, on comprend en regardant ce graphique que les événements ne remontent pas vers l'objet application mais directement vers l'objet SystemManager. Pour avoir un comportement factorisé pour toutes les popups, voire pour l'application, il suffira d'effectuer l'abonnement directement sur l'objet SystemManager comme suit :
Application.application.systemManager.addEventListener(...)