So I find that actually, the __attribute__((callback(fn)) approach is unnecessary for the purpose proposed.
I still think we should be looking at tidying up the error contexts API, but it's easy enough for extensions to provide a wrapper over it, so that's not a big deal really.
I will submit my docs patches separately to ensure they get some attention, and I'll experiment with llvm threadsafety annotations / capabilities.