As far as I know you're right on all counts, which means if you want to do this you might have to resort to Papyrus hackery.
What about this:
When an arrow is fired... player randomly fires a hitscan projectile with identical velocity/gravity that places an invisible flat object aligned to surface normal using ImpactData. This object would be made of a little-used Material like Glass, which you'd then set in the ImpactDataSet to make sparks. Bingo, random sparking effect on any surface. Using hitscan should mean it will always arrive before the actual projectile...
Doing this for melee weapons would be trickier, but if you tied the above hitscan spell to the WeaponSwing animation event or something... might work "well enough"...
That's my first thought, anyway.
Not sure if this will work for your situation, but If your weapon/projectile is using a magic effect to generate the Impact Set, the upcoming SKSE update will allow you to change the Impact Set data on Magic Effects via script.