Вы можете использовать вложенный класс для моделирования концепции, вовлеченной в реализацию внешнего класса, но настолько тесно связанной с внешним классом, что не будет иметь смысла использовать вложенный класс в любом другом контексте. Вложенные классы имеют видимость и могут явно зависеть от деталей внешнего класса, которые не являются частью его открытого API.
Общий шаблон для вложенного класса для реализации открытого интерфейса, а для внешнего класса - для представления экземпляра вложенного класса через метод, тип возвращаемого значения которого является открытым интерфейсом. Шаблон итератора является одним из примеров этого.