Очень общая постановка задачи. Алгоритмы могут быть довольно заковыристыми - например, бета-код для древнегреческого.
В качестве противоположного к регуляркам полюса можно предложить побить слово на буквы и для каждой буквы собрать "метаданные", имеющие смысл для конкретной схемы транслитирации ("позиция в слове", "сочетание символов"), и применять замену не побуквенно, а к букве + метаданные. Скорее всего получится несколько громоздко и, вероятно, не очень эффективно, зато решение концептуально простое, гибкое и конфигурируемое. (Оверинжиниринг - моё второе имя.) Могу игрушечный пример набросать.