Hi Robert. You have two choices. One is as you suggested; make a bundle or framework from update-engine, then access it from the PyObjC bridge (e.g. objc.initFrameworkWrapper() or objc.loadBundle()). I don't have a lot of experience with the PyObjC bridge so I can't offer much more help.
Another option is to use a command line program, such as the EngineRunner example, and call it from python with subprocess.Popen(). As I'm sure you know, it is very easy to run tasks and parse their output with python.