I have been working on (read as: rewriting large sections of) GnomeChat, though not committing my work to CVS, because it doesn't build yet. This brings me to GConf Hint #1:
This kind of thing is what I've been doing, cutting down on the sheer size of the functions which exist inside GnomeChat.
When trying to keep your app's GConf code in a centralized place, the nicest way is to create a GObject, with properties which are mapped to GConf keys (I use a static GHashTable, with key/property names), and only have to deal with all that GConf housekeeping (like the notification functions) in one place. Then, from your app's code, simply get an instance of this proxy object and connect to the "notify::prop-name" signal. This is basically a GConf-wrapping version of GtkSettings.
I've also been rewriting things to use the "objectification" branch of libgircclient, which handles channels, queries, and users as GObjects. This means rewriting the chatbox (viewer/entry/userlist/topic), viewer, userlist, and connection stuff. I'm also working on porting things over to GTK+ 2.4's APIs. Finally, I'm trying to figure out a nice way to handle only keeping the RDF stuff in memory when it's being used -- which may require *another* rewrite away from the current GtkTreeModel impl -- ugh.
However, keeping me from working full-time on GnomeChat is the GNetwork Library, the rewritten version of LibGTcpSocket. It's proposed for GNOME 2.6, and the plan is to have the gnome-network module/package/app suite use it.