Thanks for that @wtaysom. I'm not fluent in LISP, so there was a bit of a language barrier!
I've internally translated into C to try to evaluate it. I'm not sure this is quite right, so please correct me where I'm wrong... It seems like an expansion of the fairly common pattern of proving a function pointer to handle errors:
Instead of a single handler, you provide/build a list/stack of error 'restarts' and another 'handler' that chooses the appropriate restart to use.
This certainly seems like it could a useful technique. It's hard to see a priori where the benefits/drawbacks would be. I'll have to try it out and see!