StateFlow - логика использования практически идентична лайвдате, конструктор принимает первоначальное значение, что делает её 100% null-safety, ровно так же может быть lifecycle-aware как и лайвдата и даже больше, благодаря екстенешнам lifecycleScope.launchWhenCreated/Started/Resumed, имеет множество удобных операторов для преобразования данных, не привязана к платформе
lifecycleScope.launchWhenCreated/Started/Resumed как раз костыли для того, чтобы флоу был lificycle-aware, который у ливдаты из коробки, поэтому все еще не вижу преимуществ. А остальное - вы правы, они почти идентичны, так что все еще не вижу смысла бежать с ливдаты на флоу