Main - это всего лишь точка входа, сферический конь в вакууме. Однако сам по себе этот "конь" существовать не может и живет внутри процесса. Процесс как раз и возвращает код 0. Мы может только указать процессу, какой код он должен вернуть по завершению. Это если в двух словах.