Indeed, the very first thing you're doing by adjusting PWM is adjusting the flux into the winding inductance. Get this wrong and current overshoots and *pop*.
The best way (the only true way) to control an inductive load, is to control the current into it. A Hall affect current sensor could be used to measure motor current, and the PWM adjusted to maintain that at some set current. This inner loop is very fast (comparable to the clock frequency), so it can protect the transistor even in the event of a short circuited load!
The current, in turn, is set by a second loop that controls whatever parameter is of interest: output voltage (especially for power supplies), torque (torque is very close to current, actually, but a torque servo would address bearing and windage losses), RPM (very close to voltage, except for winding DCR and magnetic leakage), etc.
The two-loop architecture is very easily implemented in a microcontroller, or can be done discrete with a dual op-amp. Note that you need a relatively fast MCU to monitor current safely: ATmega won't cut it, the ADC is just too damn slow. But Xmega will, or pretty much anything else out there (dsPIC, ARM..).
Tim