Похоже, ваши основные требования: «использовать потоки SSL и не-SSL без проблем». Чтобы сделать это, вы можете обернуть различные типы потоков таким образом, чтобы получить доступ к функциям, которые вам нужно использовать.
Часть того, как вы это делаете, - это решение, как вы собираетесь управлять памятью. MutableBufferSequence не является типом, он определяет набор требований для типа, который будет использоваться в этом контексте.
Если вы собираетесь использовать один из небольшого числа подходов, вы можете просто использовать их в интерфейсе (при условии, что он соответствует требованиям MutableBufferSequence / ConstBufferSequence). Недостатком этого является то, что управление буфером становится частью интерфейса.
Если вы хотите сохранить гибкость управления буфером asio, вы можете
Создайте шаблон кода для типа потока, чтобы выполнить бесшовное требование SSL / не-SSL.
Создание оболочки для различных типов потоков с помощью шаблонных методов для типа буфера.
(Обновленный ответ; я не должен пытаться отвечать на такой вопрос, если у меня меньше двух минут!)