fwiw,
A few things I have found that really help with customizing the editor/app and such:
https://github.com/jsbain/objc_hacks/blob/master/print_objc.py
prints the Instance and Class methods of a class, but not of its ancestors. really helps identify what is unique about custom classes (vs dir() which shows instance and inherited methods)
A lot of good stuff is exposed in PA2UniversalTextEditorViewController, which is what editor._get_editor_tab() returns. For instance, saveData, which can be swizzled. Also, @dgelessus, I think you mentioned you wanted the ability to launch a script with another interpreter version, this class seems to have that capability.
void runScriptAtPath_withInterpreterVersion_arguments_( object, int, object )
void runScriptAtPath_withInterpreterVersion_scriptForShebang_arguments_( object, int, object, object )
void runScriptWithNonDefaultPythonVersion( )
Also, editorView() on this object returns a view which you can addSubview_ to create your own overlays.
Also, I have experimented a bit with NSNotifications, which can be another interesting way to get callbacks for some things without swizzling. here is a class which captures all notifications types (by default excluding the various NS and UI notifications). For instance, changing from editor to console or vice versa posts a notification which can be observed and action taken.