When you PWM the voltage to the motor you are effectively controlling the current to the motor which is related to torque (acceleration). The "jamming up" that you notice is basically the inability of the motor to overcome friction.
Think about the PWM as the gas pedal in your car, to get to a constant speed you may push all the way down, gradually back off as you reach your target speed and then modulate it to maintain that speed.
A DC motor driven at a fixed voltage loses torque as it goes faster and faster. That's why it doesn't speed up to infinity. Gearing it down effectively limits the top speed you'll see at the output. It gives you more torque at the output but you're trading off speed.
As Tim notes what you need is a closed speed control loop running over that such that you set a speed set-point and the loop, very quickly, ramps the PWM up and down to maintain the speed. To do that you need some way of measuring the speed. Once you have that you may be able to get by with a relatively simple PI controller.