Если listener сделать публичным.
Main.as3:

Код:
package {
import flash.display.Sprite;
import foo.Foo;
import bar.Bar;
import flash.events.MouseEvent;
public class Main extends Sprite
{
public function Main()
{
var f:Foo = new Foo();
var b:Bar = new Bar();
f.addEventListener(MouseEvent.CLICK, b.mouseClickListener);
addChild(f);
addChild(b);
}
}
}
Foo.as3:

Код:
package foo
{
import flash.display.Sprite;
import flash.text.TextField;
public class Foo extends Sprite
{
public function Foo()
{
x = 50;
y = 50;
graphics.beginFill(0x009900);
graphics.drawCircle(0, 0, 10);
var text:TextField = new TextField();
text.text = "Foo";
text.x = 10;
text.y = 10;
addChild(text);
}
}
}
Bar.as3:

Код:
package bar
{
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.text.TextField;
public class Bar extends Sprite
{
public function Bar()
{
x = 100;
y = 100;
graphics.beginFill(0x990000);
graphics.drawCircle(0, 0, 10);
var text:TextField = new TextField();
text.text = "Bar";
text.x = 10;
text.y = 10;
addChild(text);
}
public function mouseClickListener(e:MouseEvent):void
{
trace("Вызван Bar.mouseClickListener()");
}
}
}
Если listener сделать приватным, код чуть-чуть поменяется:
В Main.as3:

Код:
package {
import flash.display.Sprite;
import foo.Foo;
import bar.Bar;
import flash.events.MouseEvent;
public class Main extends Sprite
{
protected var bClickListener:Function;
public function Main()
{
var f:Foo = new Foo();
var b:Bar = new Bar();
bClickListener = function(e:MouseEvent):void {
trace("MAIN: Foo CLICKED");
b.getClickListener(e)();
};
f.addEventListener(MouseEvent.CLICK, bClickListener);
addChild(f);
addChild(b);
}
}
}
В Bar.as3 - mouseClickListener делается приватным, и добавляется public метод.

Код:
public function getClickListener(e:MouseEvent):Function
{
return function():void {
mouseClickListener(e);
};
}
Всё можно сделать красивее, расширив например класс Function через prototype, добавив в него функцию типа Delegate.
Код только для примера, набросал не для реального применения.