The concept you mention that's used with wallet, is often referred to as the PIMPL pattern (private implementation).
I first came to appreciate the power of the paradigm when first stumbled on to QT3, and to this day I still point to the QT code base as how to do it right.
Essentially, it allows you to define a class interface that can remain constant while the implementation can be changed without affecting either the binary or the logical interface (dependencies, etc). Its a beautiful way to encapsulate dependencies and simplify the use of a class library. And unlike the notion of "private" in a class definition, what you do in the implementation class can be considered truly private.
QT uses this to great effect such that each shared library that implements a class interface, never changes for the life span of a major version release, while the internals, the implementation details can be updated without requiring the users of the libraries to have to recompile and relink.
Even when not building a binary library, I still use this paradigm to provide true isolation between my implementation and the users of a class library.