Pretty cool game all around.
I might be misunderstanding how the game works, but it seemed easiest to not throw the heart until the end of a wave because that way you can kill everyone without taking much (if any?) damage. And then at the end of the wave you can collect all the souls at once. I would guess that you intended for the player to constantly being throwing out the heart. Maybe if you want that to be the case you could make the souls despawn after a short time (if they don't already).