Если оставить вопрос "А зачем нужна фаза захвата для невизуальных объектов?"
Главная идея: capture или не capture - это всетки свойство "подписанного слушателя" (я был не прав с событием - у него оно как-бы меняется, как-бы - потому-что событие клонируется)
Поэтому не знаю как вам поможет массив, в котором нет информации о функциях-слушателях
Значит надо:
- связать useCapture со слушателем
- помнить что тот же слушатель может подписаться еще и через useCapture == false;
Сделать поле в listener с названием useCapture мы физически не можем.
Значит надо замепить useCapture по ключу-слушателю, например так:

Код AS3:
private var _listenerAddedAsUseCapture:Dictionary = new Dictionary();
private var _listenerAddedAsNotUseCapture:Dictionary = new Dictionary();
override public function addEventListener(type:String, listener:Function, useCapture:Boolean=false, priority:int=0, useWeakReference:Boolean=false):void
{
if(useCapture)
{
_listenerAddedAsUseCapture[listener] = listener;
} else {
_listenerAddedAsNotUseCapture[listener] = listener;
}
}
// При имуляции фазы захвата
event.eventPhase == EventPhase.CAPTURING_PHASE;// read-only - чтобы стало не рид-онли, видимо, придется расширить класс Event и использовать только собственне эвенты или забить на это поле
for each (var listener:Function in _listenerAddedAsUseCapture)
{
listener(event);
}
// При диспетчинге фазы всплытия
for each (var listener:Function in _listenerAddedAsNotUseCapture)
{
listener(event);
}
Может прокатит вариант по-красивее (может удобнее будет рулить 2-мя внутренними диспетчерами, видимо, собственной реализации):

Код AS3:
override public function addEventListener(type:String, listener:Function, useCapture:Boolean=false, priority:int=0, useWeakReference:Boolean=false):void
{
if(useCapture)
{
_captureEventDispatcher.addEventListener(type, listener, true, 0, useWeakReference);
} else {
_normalEventDispatcher.addEventListener(type, listener, false, 0, useWeakReference);
}
}
// При имуляции фазы захвата
_captureEventDispatcher.dispatch(event);
// При диспетчинге фазы всплытия
_normalEventDispatcher.dispatch(event);
_captureEventDispatcher - это наша реализация, которая будет эмулировать фазу захвата
_normalEventDispatcher - это тоже наша реализация, которая будет эмулировать фазу всплытия
Теоретически так должно быть меньше каши в коде
Но
"В теории теория и практика не разделимы - на практике это не совсем так"