If you really want to have a dynamic system where you could cook up a few basic behaviours, but have the player combine them etc., I'd suggest using some sort of a component system. You could attach the RainComponent to the spell, and a FireComponent, and the RainSystem would create more entities with a copy of the FireComponent, and then you process that onwards.
That would be in the case of you using an Entity System all throughout, but simply maintaining a list of Components for each spell, and having the behaviour defined in components should be an easy and natural way to stack different behaviours. (They seem to split nicely, you have components affecting the way the spell is generated (ball/rain/etc.), then you have components affecting how the generated thing moves (could have a VelocityComponent with x/y/rotation and accelerations for each), and then the type or some other sort of modifiers (PoisonComponent/FireComponent etc.))
Graphics and particle effects can also be generated from the set of components.