Нашел один из примеров реализации вот тут.
Какие, возможно, нужны будут доработки:
Потребуется какой-то служебный класс, который будет регистрировать для пользователей функции для вызовов внутри шаблонов (им нужны будут уже заранее определенные ключи)
Потребуется разбить логику по конфигурированию самого Freemarker и по получению шаблона в виде строки
Потребуется доработка с указанием папки с шаблонами пользователя и названием самого шаблона (скорее всего, будет добавлено либо в конфигурацию, либо через system/env параметры)
Провести исследование возможностей шаблонизатора Freemarker для подгрузки пользовательских шаблонов