Letting a character keep track of the projectiles they fired can work fine, but it also means that whenever you remove that character, it's projectiles are gone as well. If I remember correctly, that's what happened in Tiberian Sun when you destroyed a hover MLRS - if it had any missiles in flight when it exploded, they would disappear.
Letting a characters update function return the projectile(s) it created, so the update loop can put those in a projectiles list, can also work just fine. Handling multiple projectiles per update can be as simple as always returning a list - it can be empty or it can contain one projectile or more.
Here's what I would propose: store the projectiles and characters (hero, allies, enemies, and so on) in a World object, and pass a reference to that object to every character that needs to interact with it (by launching projectiles into the world, or by checking for nearby enemies). For every missile your hero launches, he calls his world's addProjectile function. If the hero needs to perform other actions that affect the rest of the game, the World object can provide functionality for that, without you having to clutter the main update loop with special cases.
Of course, you're not limited to one approach only. You can combine them whenever you need to. If you have homing projectiles, you can give them a reference to their target, so they can update their velocity with each update call. If you have projectiles that can't damage the one that fired them, you can give them a reference to their 'owner'. If a character can only have 2 projectiles at the same time (as in some old games), you can have characters keep track of their active projectiles, so they know when to stop firing. You can even let projectiles keep track of their 'friends' if they're fired in a burst, so they can coordinate their movement to form fancy flocking patterns. ;)