A good way to detect that the motor is stalled is to monitor its current. The thing that damages the motor when it is stalled is its current. The thing that damages a motor that's _almost_ stalled is its current.
So don't try to detect a stall, just limit the current!
If you want to get fancy then let the motor run over stall current for
1/2 second or so before reducing the PWM. This will let it do things like spin up or get momentarily stuck without shutting the whole thing down. You can get real fancy with this, but it's hard to do within the confines of analog circuitry -- and a PIC with a cheezy ADC is almost as small as a 555.