В общем реализовал так:

Код AS3:
SomeObject.addEventListener(MouseEvent.CLICK,this.onClick,false);
......
private function onClick(e:MouseEvent):void //Обработчик клика
{
......
var pool:Array = this.getUpperOfLowerUnit(e.stageX,e.stageY);
......
}
private function getUpperOfLowerUnit(x:int,y):Array
{
var gp:Point = new Point(x,y)
var TmpPool:Array = this.parent.getObjectsUnderPoint(gp); //Тут получается список Shape'ов
var Pool:Array = new Array();
for(var i:int=0;i<TmpPool.length;i++){
var c:DisplayObject =TmpPool[i] as DisplayObject;
while(c.parent!=c.root ){ //тут пробираемся от Shape'а по списку отображения вверх
if(c is Нужный тип){ // пока не встретим нужный тип наследника DisplayObject
break;
}
c=c.parent;
}
if(c is Нужный тип && c!=this){
if(Pool.indexOf(u)<0) { //если объект не добавлен
Pool.push(u); //добавляем
}
}
}
return Pool
}