Here is one example how this could look like in C2. Essentially, the System "plug-in" gets the following additional event conditions.
System.before any event fire
System.after any event fire
System.before any action executed
System.after any action executed
And two system variables that hold the string of the event condition that fired, and a string that holds the action executed. Ideally, it would be nice if some event conditions and actions could be tagged, and the tags would show up in a system variable also.
If one wants to make code further customizable, then there could also be a system action to stop the execution of an action. System.Discard Action. This would make this facility very close to aspect-oriented programming facilities -- i.e. code can be overridden.