Nested classes are used to encapsulate pure implementation-support types. This is relatively unimportant in amateur software; in a large production code base, proliferation of unencapsulated implementation types is something one would want to avoid. The classic example being the fully insulated concrete class idiom.
This is obviously even more important for types which are compile-time polymorphic (or where inline access from client code is required for performance reasons); ie. where a compilation firewall is (as in the fully insulated concrete class) not a possibility.