Лет пять назад Vit мне указал на это.
В принципе, ничто не мешает "перегрузить" goto и сохранять значение состояния в отдельную переменную.
Или творение Дункельса допилить, чтобы часть case задавать в явной форме именованными.
Наверное в каком нибудь проекте я это сделаю.
Пока, на практике оказывается достаточным того что прикладная программа, в момент обработки запроса по modbus гарантированно сидит в каком-то yield().
И он идентифицируется по переменной процесса.
Но я и это, вроде бы, ни разу не использовал.
Все же логика переходов по состояниям прикладной программы отслеживается по выходным сигналам ей формируемыми.
И раз уж тему зацепили - вложенные автоматы.
Лично мне ни разу не понадобились.
Точнее, частенько бывает что какой-то то ли датчик, то ли исполнительный механизм описывается конечным автоматом.
Но это тогда отдельный процесс, существующий независимо от того, нужен ли он управляющей программе или нет.
"Где-то там" его вызывает big-loop и результат его деятельности (и состояние) видны в памяти,
но так чтобы основной автомат в каких-то своих состояниях СОЗДАВАЛ и удалял автоматы - ни разу не подвернулось случая где это было бы полезно.