Подглядел няшный паттерн в бсдшном ините:
В его FSM обработчик каждого из состояний является отдельной функцией, которая в качестве возвращаемого значения возвращает адрес функции-обработчика следующего состояния.
Сам цикл автомата тогда сводится к for (;;) s = (state_t) (*s)();
Жутко просто, но я сам никогда не догадывался так сделать :<