I've mostly given up on the idea of driving applications from a higher level language, I much prefer having C as a foundation and then embedding a more dynamic language that I have full control over. I like to call it reverse FFI :)
I used to do that in Common Lisp, which has the only FFI I've come across that's even nicer than Python's. But it's backwards; once you're in a high level language, it's inconvenient and expensive to reach down.
It makes a lot more sense to me to drive the whole process from C; not only do you have direct access to C; you also get to control the embedded world from the outside, which is about as meta as it gets.
http://rosettacode.org/wiki/Call_a_function_in_a_shared_libr...
(setq Display (native "/usr/lib/libX11.so.6" "XOpenDisplay" 'N ":0.0"))
http://www.iro.umontreal.ca/~gambit/doc/gambit.html#Scheme-i...