I am not sure to understand your context, but here is what I did.
We have an order manager which handles confirmation, payment, shipping …
The business rule is the customer can cancel his order until it has been shipped.
This part of the process (before shipping) is defined in a subprocess. This subprocess has a signal interrupting event (message interrupting event would be more relevant but was not implemented in Activiti 5.9) which is triggered by the cancel order button in the GUI.
So my suggestion is to encapsulate the part(s) which can be cancelled in a subprocess, and define an interrupting event on this subprocess.
If you are interested I can provide an example. In particular there is some specific code involved to trigger the interrupting event using Activiti API.