The CL condition system separates the signaling of a condition (of which errors are a subtype), the handling of a condition, and the definition of recovery strategies (restarts).
Instead of unwinding the stack when a condition is signaled, handler code is invoked in the dynamic context of the signal and thus has much more information available to decide how to recover.
If a decision on how to recover can't be made programmatically, the system kicks out to the user where they are presented with the choices you have given them.
See: http://www.nhplace.com/kent/Papers/Condition-Handling-2001.h... for more.