Смотрел несколько дней назад, уже всего точно не помню, но вот некоторые моменты:
Инкапсуляцию придумали когда делали симуляцию поведения распределённых систем. В этом случае инкапсуляция — адекватная модель для предметной области. Но оопе-сектанты пропагандируют что для всех областей.
В некоторых языках, которые лежат в основе C++, было что-то типа закрытого наследования (discriminated/tagged unions), и Строструп был с этим знаком. Но специально не включил это в C++ (наверное по вредительским соображениям). Могли иметь tagged unions (и pattern matching) в C++ с самого начала. А так пришлось ждать до C++17 чтобы появился хотя бы std::variant