No, it does not have to be multiple swfs.
If you check out the
Modularity and
PipeWorks demos, all the modules are defined and compiled into a single swf. There it is done for convenience; having a demo composed of multiple projects would be a pain for developers to try out.
Each module is scoped to its own namespace, so if you wanted to separate them into multiple projects, you could easily do so. From there they could be rendered into separate swfs and then loaded dynamically by the host app, OR, you could create library projects and then compile them into the main application and instantiate them directly.
Some have thought these demos defeated the purpose of making modules because they aren't loaded dynamically. But in the case of iOS, although I haven't tried it yet, I don't believe you can
load modules and run them in iOS. You can load a timeline-only swf and play it, but no code. Make sense if Apple controls the code you submit to the store, if they let you dynamically load and run modules, then effectively, you could slide in unapproved executable content that way.
So in some cases, you want the benefits of a modular app, from the standpoint that each module has its own PureMVC core and State Machine, can be managed as a separate project, and can still be treated as one big program.