Я бы на самом деле сказал, что файлы заголовков не очень хороши, потому что они запутывают интерфейс и реализацию. Цель программирования в целом, и особенно ООП, состоит в том, чтобы иметь определенный интерфейс и скрывать детали реализации, но в заголовочном файле C ++ показаны как методы, наследование и открытые члены (интерфейс), так и частные методы и частные члены. (некоторая часть реализации). Не говоря уже о том, что в некоторых случаях вы в конечном итоге встраиваете код или конструкторы в заголовочный файл, а некоторые библиотеки включают шаблонный код в заголовки, который действительно смешивает реализацию с интерфейсом.
Я полагаю, что первоначальная цель состояла в том, чтобы позволить коду использовать другие библиотеки, объекты и т. Д. Без импорта всего содержимого скрипта. Все, что вам нужно, это заголовок для компиляции и ссылки. Это экономит время и циклы таким образом. В этом случае это хорошая идея, но это только один из способов решения этих проблем.
Что касается просмотра структуры программы, большинство IDE предоставляют такую возможность, и существует множество инструментов, которые запускают интерфейсы, выполняют анализ кода, декомпиляцию и т. Д., Чтобы вы могли видеть, что происходит под прикрытием.
Что касается того, почему другие языки не реализуют ту же функцию? Ну, потому что другие языки приходят от других людей, и эти дизайнеры / создатели имеют другое видение того, как все должно работать.
Лучший ответ - придерживаться того, что нужно делать, и делать вас счастливыми.