You shouldn't have to, though. I did find a silly little bug with that function, IIRC, it may not have gotten committed, or something else may be going on. Guess I'll add that to the two other things.
Something to mention about createParticle, the function is technically in testing, awaiting an overhaul of the particle system. I'm not sure if I should leave it as-is, or if I should change the parameters, or have some kind of object-oriented methodology...also, whether or not it belongs in the 3D graphics or mission library is something I've been idly switching back and forth between. On the one hand, a 'particle' only has a graphical existence. On the other hand, they have to be manually rendered anywhere outside of a mission, and their actual function is incredibly simple.
I don't know why collision and velocity are working. My guess is that velocity is because of some interference with the physics system. Freespace uses a bizarre combination of physics, and I don't think I've expanded everything into scripting yet. It might be prudent to re-do the way I've done that as well, in case something else uses the same physics format as the "object" type. At any rate...
There are some 4 key fields to velocity. Velocity, desired velocity, maximum acceleration, and maximum velocity. There's also something called "damping" involved, that I don't fully understand. But essentially what FS does, is it attempts to change velocity (m/s) match the desired velocity (m/s) at a rate of maximum acceleration (m/s/s). It may automatically set desired velocity to maximum velocity, but I can't say for sure; I haven't looked at the code enough.
All that means is that at the point that things reach the physics code, the desired velocity and velocity must be the same or the physics code will attempt to change it. There's a physics flag for weapons that forces a constant velocity codepath, but that hasn't been extended into scripting yet. That may actually be the best solution for scripted velocity in most cases, as it would make the physics code adopt a 'hands off' policy for objects and just move them by whatever Velocity is set to.