Я, в целом понимаю аргумент, но когда поток выполнения непонятно как входит и выходит в/из функцию, это, извините, спагетти-код
Входит и выходит как раз понятно, как и когда. Видишь co_* - это потенциальная точка "паузы". Всё очень явно.
В каком-нибудь луа, например, всё неявно - можно вызвать функцию, которая внутри себя сделает yield, и запаузит текущую корутину. И при вызове этого не понять, так как никаких дополнительных ключевых слов не требуется. Просто f()
.