Применить в реализации UDP протокола - без проблем. Более того, когда нибудь и применят. Проблема в оптимизации. Монады, паттерн-матчинг - это высокий уровень. UDP протокол - это низкий уровень, и там требования идут к максимальной производительности. Пока нет достаточно хороших компиляторов, которые эффективно преобразуют высокий уровень в низкий с оптимизацией, ибо это крайне тяжелая задача. Потому низкоуровневые вещи пока приходится писать не используя высокоуровневых концепций. Ибо 1 хрен потом ручками оптимизировать, и лучше для специфических задач начинать с относительно низкого уровня, чтоб понимать как это будет работать на реальном железе. Но рано или поздно такие оптимизирующие компиляторы появятся, мир не стоит на месте.

Большинство языков сейчас - универсальные. И мультипарадигменные. Так как при решении реальных сложных задач их разбивают на подзадачи, и для каждой подзадачи будет лучше подходить определенная парадигма. Где то тупо императив, где то функциональщина, где то ООП, где то конечные автоматы, где то декларативное, и т.д. Соответственно язык, претендующий на универсальность, должен предоставлять удобный синтаксис для любой парадигмы, которая может потребоваться при решении задач. Серебряной пули то нет.

Если брать ретрокомпы, например ZX, тут да, особо не разгуляешься. Пока (скорее всего в ближайшие лет 50 минимум) - только низкий уровень. Потому тут в принципе ниша для Оберон подобных языков есть. Вот только это крайне узкая ниша.

А управлять лампочкой в подъезде не составляет даже в машинных кодах, это ИМХО не ниша вообще, здесь в большинстве случаев даже микропроцессор будет не нужен.