The current extension framework is relatively simple. It supports attaching an extension interface which looks up a factory that then has the responsibility of either looking up an implementation class or create a proxy to execute code for each method.
Due to that simple structure, there are a number of inconsistencies, especially around the extension context and wrapping each method from an interface.
The main reason for this is that most of the interesting functionality for the extension code is not actually in the core/extension