If you use the Flex ModuleLoader to handle loading/unloading of modules, you can manage it just fine.
However, recently I've had difficulties with garbage collection of modules instantiated directly as Flex components. Early on I thought I had it whipped, but then the desire to do Flex binding across modules in the view hierarchy got the best of me, and I find Flex is hanging on to objects no matter how thorough I am with removal of listeners and removeChild called on those children in the view.
I've been trying this approach as a more Flex-friendly approach, and found it easier to implement than pipes or interfaces.
But it appears better to have modules be loaded, plumbed and communicated with in that fashion. The plumbing can seem like a hassle to put in place, but in the end, it's possible to reclaim all the memory and be fully in control.
Check out Simon's great post on garbage collection with MultiCore:
http://www.nutrixinteractive.com/blog/?p=132-=Cliff>