TL;DR: delay примерно соответствует вызову postDelayed на хэндлере, связанном с мэин лупером. Если вы вместо него бахнете Thread.sleep (или просто нагрузите мэин тред вычислениями), у вас всё, как и ожидается, заблокируется.
У меня возник, этот вопрос как раз потому что я, загружал картинки на сервер через suspend fun в viewModelScope.launch {}, а viewModelScope базируется на Dispatchers.Main. И все работает)) Теперь хочу разобраться почему