In practice the option to resume is used much less frequently than the option to throw. There are two primitives one can use to signal a condition: SIGNAL allows resumption, but ERROR does not. So if you don't want to deal with the complexities of a possible resumption, simply call ERROR.
Similarly, the client, to establish the handler, can use HANDLER-BIND, which is the fully general form that permits resumption, or HANDLER-CASE, which is simpler to use but does not permit resumption.
In practice, most of the time people use ERROR and HANDLER-CASE, and so the extra complexity does not intrude at all.
OTOH it is occasionally handy to be able to resume.
Similarly, the client, to establish the handler, can use HANDLER-BIND, which is the fully general form that permits resumption, or HANDLER-CASE, which is simpler to use but does not permit resumption.
In practice, most of the time people use ERROR and HANDLER-CASE, and so the extra complexity does not intrude at all.
OTOH it is occasionally handy to be able to resume.