This. If it is GUI related, you can just isolate the core classes and put your GUI code in a seperate file, will make it even easiers for others to adopt it. If you want to change part of the core code, that's another story altogether.
Yes, this is how I've done it in bitcoin-qt:
https://github.com/laanwj/bitcoin-qt/I link to the core (with some minor compat changes) as a kind of library.
Currently it mimics the wx bitcoin client. If you want to improve the GUI, pull requests are welcome

I'll only start integrating them though when the core functionality of the GUI is finished.
For core changes I recommend improving the core instead of making your own client implementation. A new implementation is a lot of (wasted) effort and it will be difficult to exactly compatible with the current code, any error could result in forks of the chain...