Насколько правильна такая модель работы?
Расскажите подробнее, какая задача решается. Если бы вы спрашивали про обработку ЯП общего назначения, указав целевой язык для компиляции (например, "TypeScript в JavaScript" или "Java в JVM"), то ваши цели были бы понятны. Но у вас декларативный язык, и другие цели, не указанные в вопросе. Судя по примеру API цель - предоставить объектную модель? Или сгенерировать выходное представление на другом языке?
возможности напрямую считывать императивные команды, вроде "создай тип Х", "добавь ему поле Y"
Хоть я до конца не понял ваших целей, мне кажется это плохой идеей - не вижу смысла добавлять императивность там, где есть декларативное описание, тем самым вы потеряете часть информации о вашем декларативном представлении и привнесёте паразитную - например, зависимость от порядка исполнения этих опкодов. Оно вам зачем? Ведь мы как раз стараемся избавляться от такой паразитной информации, когда используем DSL с собственным синтаксисом вместо ЯП общего назначения (вспоминаются всякие ORM маппинги записанные кодом на C#, где код как бы императивный, но порядок декларативных инструкций на самом деле значения не имеет).
В этом ВОЗМОЖНО был бы смысл если ваша цель - сгенерировать императивный же код на разных целевых языках. Ну не знаю, например валидаторы. Валидатор на C#, валидатор на JavaScript, валидатор на PHP. Тогда да, возможно стоило бы использовать такое промежуточное представление, и то непонятно был бы от него толк или вред.