"""it introduces C code into a system that has no C code"""
Not true; RuleDispatch can be built --without-speedups if you want. It does make some difference to the performance, sure, but if I recall correctly the difference is measured in a handful of microseconds for most things, mainly because I haven't written a lot of C code for it yet anyway. And for Windows -- the main platform where lack of a compiler is usually an issue -- I distribute a binary egg.
"""Events are also a less complicated concept for other contributors to understand"""
What's so complicated about that? It's true that you have to make some policy decisions about what kinds of subscribers you'll have - i.e., before/after/around/custom - but once you've made them that's that.
Further, nothing says you have to expose the full power of the system. You can always wrap it in a shortcut API that implements common use cases. Just say that the generic functions are event objects, and have subscribe function(s) that take an event, a callback, and a filter. Voila! It's an event system, and nobody needs to know any part of RuleDispatch that you don't want to expose.