Тут без перекомпиляции никак. + нужно типы данных собирать в отдельном модуле и некоторые системные операции объявлять там же, как inline-кодовые-процедуры (например, манипулирование с тегом типа у объекта).
+ IFDEF использовать. Обычный IF от булевых констант, работает как раз таким образом, как IFDEF.