Поехали.

Код AS3:
public class main extends MovieClip {
Классы пишутся с большой буквы. Я на 100% уверен, что MovieClip Вам нафиг не нужен. Я вообще слабо представляю
рядовую ситуацию, в которой надо наследоваться
сразу от MovieClip. Программно Вы кадры не добавите. Наследуйтесь от Sprite`а.

Код AS3:
var mc:MovieClip = new createMovieClip(this, "mc1");
Это здорово, передавать parentObj. Только забудьте этот подход, раз и навсегда. К тому же, дело Вы имеете с DisplayObject`ами - а у них есть геттер parent.

Код AS3:
mc.enterFrame(function(){
trace("test");
});
Это полнейшая глупость что Вы написали. Замыкание (это функция в методе) - это очень и очень плохо. Поищите на форуме, много раз объяснялось. Например, из за этого замыкания Вы никак не отпишитесь от этого метода не имея прямой ссылки на него вне его тела. Более того, гораздо проще написать

Код AS3:
mc.addEventListener(Event.ENTER_FRAME, yourFunction);
для достижения такого-же эффекта. Зачем Вы ради этого создали новый метод?

Код AS3:
this.name = instantName;
Ну, ничего плохого в этом нету, но name Вам нафиг не нужен. Это осталось в прошлых версиях языка - сейчас используются ссылки. Всё стало серьезно, долой детские игрушки, такие как "имя". Пффф~~ Оно может пригодится, наверно, только для метода getChildByName - а имея ссылку на ребёнка (а Вы её имеете) - это ненужно.
Теперь обрисую что происходит:
Замыканием Вы создали новую функцию. Совсем новую, о которой никто ничего не знает, кроме её самой. В АС3 можно подписаться и отписаться на сколько угодно событий сколькими угодно обработчиками, но нужно точно знать - что отписываем, а что нет.
О функции

Код AS3:
function(){
trace("test");
}
знают два места: это тело функции и аргумент метода enterFrame, в который передали ссылку на эту бедофункцию. Аргумент "умирает" после конца тела функции, если его нигде не запомнить - в итоге потерялась вторая и последняя ссылка на эту функцию. В итоге -
никак.
Нет, ну конечно можно взять и сохранить в переменную поля класса эту самую func, только вот нафига?

Код:
package {
import flash.display.*;
import flash.events.*;
import test.*;
public class Main extends Sprite {
public function Main(){
var mc:MovieClip = new createMovieClip(this, "mc1");
mc.graphics.beginFill(0xFFCC00);
mc.graphics.drawCircle(40, 40, 40);
mc.graphics.endFill();
mc.addEventListener(Event.ENTER_FRAME, onEnterFrame);
//а сейчас отпишемся.
mc.removeEventListener(Event.ENTER_FRAME, onEnterFrame);
//отписались, не успев подписаться. Как всё просто без замыканий то!
}
private function onEnterFrame(event:Event):void{
trace("Test!");
}
}
}
UPD: сори за табуляцию, в браузере не работает, открывать редактор лень)