I think I've read somewhere that this does not work in release but only in debug.
I agree with you that listeners are the first cause of stuff not being GC'd.
To me all listeners should be added with the weak reference parameter set to true in addEventListener (this should be the default!).
Still I think it's a nightmare not to be able to just simply remove loaded content.
I recently had trouble with a games loading platform. For most of them (small ones) I was able to keep the memory low run after run.
But one of them was a bigger 3D stuff (using away3D lib) eating lots of Mo and CPU each time.
After searching for days I was able to reduce the effect but it's still not perfect.
No wonder everyone keeps saying flash sucks because it consumes alot of memory, its because alot of developers don't give a damn about memory management and thats not flash's fault, in other languages you already have to explicit clear the memory. Get used to it, don't hack your way around.
As an old C++ game developer I partly agree. But many flash developpers don't even know what is memory.
In other languages you allocate and deallocate memory explicitly. When you call delete/free memory just gets release (well or you get a crash

).
In AS3 memory gets eat up insidiously and we don't have any tools (or clear clues of how) to free it. You can new but you can't delete.
We can even load big, complex, maybe third parties externals swf but we can't be sure to unload them. You can load but you can't unload.
I think it's a problem.