Действительно крупные проекты, как правило, не включают в себя только одну программу. Следовательно, будет несколько исполняемых файлов, каждый со своим собственным main. Попутно, эти исполняемые файлы довольно часто взаимодействуют асинхронно через очереди.
Да, каждая основная часть имеет тенденцию быть очень маленькой, инициализируя структуру или что-то еще.
Вы имеете в виду, почему main () является функцией, а не методом класса? Ну, какой класс это будет метод? Я думаю, что это в основном наследие C ++ от C, но ... все должно где-то начинаться :-)