Creo que una cosa con la que probablemente te estés encontrando es algo con lo que me encontré también cuando aprendí la programación funcional, que es que con la programación funcional puedes (y casi tienes que) pensar / trabajar a un nivel más alto que con la programación imperativa.
Creo que lo que está encontrando como menos expresivo es en realidad más expresivo: no tiene que detallar cada pequeño detalle y puede hacer más con menos código en la programación funcional: hay más poder en lo que escribe.
Por ejemplo, podría escribir imperativamente:
for each (Person person in people)
print(person.name)
lo cual es totalmente legible como inglés.
Una versión de Haskell podría ser (y esto no es válido para Haskell, pero es solo para comparación sintáctica):
map (print . name) people
que requiere menos código y menos discusión de detalles: no tengo que dividir las cosas en un bucle y sus variables ( for each (...)), la mapfunción se encarga de eso por mí.
Trabajar a ese nivel puede llevar un tiempo acostumbrarse. Si ayuda, Haskell fue probablemente el momento más difícil que he tenido aprendiendo un nuevo lenguaje desde que comencé a programar, y sé> 10 idiomas (incluido Lisp). Sin embargo, valió la pena aprenderlo.