It's more efficient and you have much more control using a perl library than you do when you call an external program. For instance, you can keep the FTP/HTTP/etc. connection open from one call to the next if you make multiple requests to the same server.
Moreover, calling an external program is fraught with a lot of coding traps and pitfalls. In general I would prefer using a perl module rather than system() whenever possible.
Btw, why do you need it to be a "single package"? There are ways to bundle CPAN packages together so that you can install all of them with a single command.