Right so on the thumper gun, i have
<effect_group name="Thumper Rifle EXP">
<requirement name="NotHasBuff" buff="buffThumperRiflePress"/>
<requirement name="NotHasBuff" buff="buffThumperRifleReady"/>
<triggered_effect trigger="onSelfPrimaryActionEnd" action="AddBuff" buff="buffThumperRiflePress" target="self"/>
</effect_group>
What that does is when the player shoots, as long as they are not under a previously fired bullet's effects, they will get a buff called buffThumperRiflePress.
In buffs.xml, that corresponds to a buff at the end which is a .55 second long buff. In it, you can see it has several removebuffs if the projectile hits anything. This will cancel the extra exp / damage buff that is applied after the .55 seconds, if you are still holding the rifle.
If the bullet flies for .55 seconds, you'l get the 2nd buff. This one would increase the bullet's damage by 300%, and add some extra experience on kills. (This guns intent was to reward long range kills with it's bullet drop. I timed the first buff (the .55 second one) to go off as soon as the bullet started to drop in game. took some trial and error to figure out.)
So, what you could do is apply a buff on right click of the spear. This would give a buff that sets your damage at 100% for say .2 seconds. Then this buff would give you another buff that sets your damage to 130% for .2 seconds... And so on. You'd want to test it a lot to see how far your spear flies when you get the different buffs.
Hopefully that's all making sense. I can do some crazy stuff with buffs, but i'm like a mad scientist.. It makes sense in my head, but probably doesnt with others. lol.