Концепция константности C ++ корректно переоценивается IMO. То, что вы только что обнаружили, является одним из его больших ограничений: оно не масштабируется по составу.
Чтобы иметь возможность создавать константный вектор неконстантных объектов, вам необходимо реализовать свой собственный векторный тип. Обратите внимание, что, например, даже стандартная библиотека должна была вводить новые типы для const_iterators.
Мое предложение состоит в том, чтобы использовать const -корректность там, где вас принуждают, а не везде, где вы можете. Теоретически, правильность const должна помочь программистам, но из-за синтаксиса это обходится очень дорого и очень примитивно (всего один бит, не масштабируется по составу, даже требует дублирования кода).
Кроме того, по моему опыту, эта предполагаемая большая помощь на самом деле не так уж велика ... большинство ошибок, которые она улавливает, относится к самому механизму правильности, а не к логике программы.
Когда-нибудь задумывались, почему большинство языков (включая языки, разработанные после C ++) не реализовали эту идею?