I started on something similar myself a while back, for Geany 0.16, but ran out of time. The code is here:
https://code.edge.launchpad.net/~mars/+junk/geany-python-bindings
You can grab a copy of the code using bzr:
bzr branch lp:~mars/+junk/geany-python-bindings
And if you just want to browse it on the web:
http://bazaar.launchpad.net/~mars/+junk/geany-python-bindings/files
The plan was to write a Python interpreter started from within Geany, create a Python module wrapping the Geany data structures and functions, and use PyGTK to interact with the graphical components. This is a similar approach to the Gedit Python bindings - PyGTK means you can use Glade for your plugins, which makes plugin development much faster.
The stuff I got stuck on seemed pretty trivial, because I was using the branch to learn Python binding generation as well as practicing some C programming (it's been a few years). The plugin successfully starts a Python interpreter inside of Geany, the waf build scripts work, it can load pure-Python Geany Plugin modules from the disk, etc. etc. I started wrapping the GeanyApp object into it's Python equivalent, but couldn't get the Python class to work. Someone with actual experience writing C Extensions could probably tell what's wrong in a flash.
Of course, the plugin API has changed in 0.17, but this wrapper is so slim at the moment that any updates should be trivial. I considered automatic code generation, but left that for a later pass (geany-lua does code generation using hand-coded interface files and some code extraction, and the Gedit Python bindings are entirely generated) The new Geany plugin interface definition files should make writing language plugins *much* easier than before. Combine that with the Scintilla IDL files and you are flying.
BTW, there is one big problem with the Geany plugin API as of 0.16: Plugins (like Python bindings) can't register other plugins - put another way, a there is no plugin registration API published via the plugin API. With the geany plugin registration API being wrapped in Python, I could easily write pure-Python Geany plugins. Lacking that, I had to come up with my own Python plugin registration.
If anyone wants to hack away on the code, please feel free to do so. I would love to see Python bindings become a reality. They are the one missing killer feature in Geany for me.
Mars