Dirac think about two targets just shooting at each other, or a battle going on with multiple units. Maybe if you only play DotA where people are kiting all day you might have this idea about targets moving 90% of the time, but that is really a misconception. Targets are very often standing still, and in my experience it's more about 70-80% of the time the target is not moving. I had been playing this game since about 3 months after the release of RoC.
Some things, like the arc/gravity of a missile, can be precalculated just once, especially for non-homing missiles.
For colliding missiles, you should have a method named "onCollide" if the user wants it. And instead of calling "onImpact" you would call "onCollide" for people who don't want collision support in their structs you can have a "static if thistype.onCollide.exists" for that entire collision block.