Collision detection is a major reason. If you only sample positions at the frame rate, you're going to have bullets go through walls without hitting anything.
Also, physics is costly to run, so usually it's not run on every frame.
And you really want your collision detection to be reasonably deterministic. Reasonable frame rates range from 30fps to 240fps, which is nearly an order of magnitude, and you want your bullets to behave the same over that range.