Im still not entirely clear on what you're asking, but if detecting collision with your bullets is the problem because they're going too fast, you'd project your intersection line from the bullet's old position to it's new position. If any intersection occurs inbetween these two points a collision occured. This way no matter what the speed of the bullet is you'll get the collision data.
Now from what I can gather, you need to figure out how fast the bullet is going when it hits something. This shouldn't be too much of a problem, since raycasting returns the distance to the intersection point, you get the distance behind the bullet that an intersection occured. The velocity of the bullet at the intersection point should be (if I remember my math correctly...)
Bullet Speed - (Distance/Speed Decrease Rate)
Where Bullet Speed is the current speed of the bullet, distance is the distance behind the bullet to the intersection, and speed decrease rate is how fast the bullet slows down per loop. That'll give you the speed of the bullet at the intersection, to work out the direction you can just return the bullet's angles.
Ill throw together a little demo in a sec'.
<EDIT>
Not sure what I was thinking, you dont need a formula, the speed the bullet was when it hits is fine. Here's some code;
SYNC ON:SYNC RATE 0:AUTOCAM OFF
MAKE OBJECT SPHERE 1,5
MAKE OBJECT CUBE 2,100
InitSpeed# = 5
DecRate# = .05
POSITION CAMERA 0,0,-200
DO
TEXT 0,0,"Click to shoot"
IF MOUSECLICK() = 1 AND Shot = 0
Shot = 1
POSITION OBJECT 1,CAMERA POSITION X(),CAMERA POSITION Y(),CAMERA POSITION Z()
Speed# = InitSpeed#
ENDIF
IF Shot = 1
ox# = OBJECT POSITION X(1)
oy# = OBJECT POSITION Y(1)
oz# = OBJECT POSITION Z(1)
MOVE OBJECT 1,Speed#
DEC Speed#,DecRate#
x# = OBJECT POSITION X(1)
y# = OBJECT POSITION Y(1)
z# = OBJECT POSITION Z(1)
c# = INTERSECT OBJECT(2,ox#,oy#,oz#,x#,y#,z#)
IF c# > 0
Shot = 0
ENDIF
ENDIF
TEXT 0,30,"Hit Speed: "+STR$(HitSpeed#)
SYNC
LOOP
Projects: Online CTF Game | Newcommer's Guide to FPS's