GTK is often used as the example of what not to do when designing interfaces. A better pure C example would be Wine's implementation of the Win32 API (specifically take a look at user32.dll). Or the Tk toolkit.
GObject is independent of GTK.
Also here is the link for the introspection tool that generates bindings to other languages: https://wiki.gnome.org/action/show/Projects/GObjectIntrospec...