Una cosa que es realmente importante para esta pregunta (y las respuestas) es la siguiente: qué demonios es la programación funcional y cuáles son sus propiedades más importantes. Trataré de dar mi punto de vista:
La programación funcional es muy parecida a escribir matemáticas en una pizarra. Cuando escribe ecuaciones en una pizarra, no piensa en una orden de ejecución. No hay (típicamente) ninguna mutación. No regresas al día siguiente y lo miras, y cuando haces los cálculos nuevamente, obtienes un resultado diferente (o puedes, si tomaste un café recién hecho :)). Básicamente, lo que está en la pizarra está ahí, y la respuesta ya estaba allí cuando comenzaste a escribir las cosas, simplemente no te has dado cuenta de lo que es todavía.
La programación funcional se parece mucho a eso; no cambia las cosas, simplemente evalúa la ecuación (o en este caso, "programa") y descubre cuál es la respuesta. El programa sigue ahí, sin modificaciones. Lo mismo con los datos.
Clasificaría lo siguiente como las características más importantes de la programación funcional: a) transparencia referencial: si evalúa la misma declaración en otro momento y lugar, pero con los mismos valores variables, seguirá significando lo mismo. b) sin efectos secundarios: no importa cuánto tiempo mires la pizarra, la ecuación que otro chico está mirando a otra pizarra no cambiará accidentalmente. c) las funciones también son valores. que se puede pasar y aplicar con, o a, otras variables. d) composición de funciones, puede hacer h = g · f y así definir una nueva función h (..) que es equivalente a llamar a g (f (..)).
Esta lista está en mi orden de prioridad, por lo que la transparencia referencial es la más importante, seguida de ningún efecto secundario.
Ahora, si revisa Python y verifica qué tan bien el lenguaje y las bibliotecas soportan y garantizan estos aspectos, entonces está en camino de responder su propia pregunta.