Есть стремление свести его к минимуму и с каждой новой версией гайки закручиваются всё крепче. Я думаю, это стремление понятно, всем хочется, чтобы язык был максимально независим от JS, чтобы мог бы всё сделать своими силами, как другие самостоятельные языки. Чтобы было не "приктутите Elm к своему JS", а "возьмите Elm и напишите полноценное приложение [запускаемое на любой платформе]". А может быть цель в том, чтобы чтобы в WebAssembly напрямую компилить.
Для этого надо чтобы не только ядро, но и все библиотеки тоже были максимально независимы от JS. Поэтому от натива всеми способами избавляются.
Кроме портов, потому что в порты может кто угодно правильный JSON слать, не только JS.
язык и так не зависим от js. Зависим рантайм и функциональность, Для повторного использования js кода таки да, можно использовать порты. Но натив модули писать тупо проще. Поэтому их и используют чуть более чем везде. Это только в теории на протах можно что то сложноее сделать, на практике этого и близко нет, ибо абсурд - на портах одна строка вызова метода объекта js, которая что нить мутирует и возвращает, вырождается в 15-20 с учётом идиотского форматирования строк кода на элме, да ещё и разбросанных по модулю в разных местах. Это ни кому не нужно, фронтенд инженеры лишь пальцем покрутят у виска если им такой код покажут.