I had implemented a pause function in Marlin, hooked up to an external button. The good part is, it can resume when the button is released, so if you are halfway through a job and you realize you’re about to cut into one of your clamps, you can pause, move the clamp, and resume.
The bad part is, it stops and resumes without acceleration, so depending on your feed rate, it could skip steps.
Within the software it works by altering Marlin’s perception of time (sorta) and all the regular machinery for queueing and interpolating stays in place unchanged, just temporarily frozen in time.
I was thinking even better would be an analog control on a knob that could stretch time and decrease feed rate by any amount, not just pause/resume. Then you could stop and start with acceleration, by turning the knob. Even better, if you had a load cell or a spindle RPM sensor, you could set up roughing operations to be unreasonably fast and automatically decrease feed rate based on the physical resistance encountered.
Unfortunately this is too low on my list and it will probably never get done, but I think it would be cool.