Боб Мартин заявил, что инкапсуляция не только возможна без ООП, но была лучше до появления ООП.
Вот выдержка из talk он дал в 2014 году в Йельской школе менеджмента.
У нас была идеальная инкапсуляция.В C все, что вам нужно было сделать, это заранее объявить ваши функции и структуры данных.Вам не нужно было их реализовывать.Вы должны были бы объявить их в заголовочном файле, а затем реализовать их в C-файле.Ваши пользователи будут #include
ваш заголовочный файл.Они ничего не могли видеть в вашей реализации.Идеальная инкапсуляция.Никто из ваших пользователей не мог увидеть какие-либо значения ваших данных.Все, что они могли видеть, это ваши подписи функций.Они могли видеть имена ваших структур данных, но ни один из членов внутри ваших структур данных.Абсолютно идеальная инкапсуляция.