It depends what you need, both are totally valid.
There's an argument to say that all components deserve their own repository (to paraphrase Torvalds "git repos are cheap") (unless you use Github). If each component can be deployed alone, then do it that way.
Even in the submodule way, there's an argument for having one meta task which goes into each submodule and runs each deploy in turn, and rolls back if anything fails vs. something that deploys the "meta" repo, with all of it's components.
Capistrano was designed to be flexible, and if you have some really special needs, you can just drop down a level and use SSHKit, which is the slightly-less-raw backend driver that Capistrano uses internally.