Em geral, use a linguagem em que seja mais fácil expressar a solução para um problema. Para a programação funcional, é quando a solução para um problema é facilmente expressa em termos de funções , daí o nome. Geralmente é bom para operações matemáticas, IA, correspondência de padrões; em geral, qualquer coisa que possa ser decomposta em um conjunto de regras que devem ser aplicadas para obter uma resposta. Você só pode realmente determinar a "melhor" linguagem a ser usada depois de analisar suficientemente o problema. É aqui que o pseudo-código se torna útil. Se você está escrevendo pseudo-código que se parece com FP, use FP.
Claro, todas as linguagens de programação completas são funcionalmente equivalentes, então não importa realmente qual você escolher em termos de quais problemas você pode resolver. Os principais efeitos serão em termos de eficiência e precisão da codificação e facilidade de manutenção.
Observe também que é possível imitar o FP em linguagens OO por meio de APIs inteligentemente projetadas. Por exemplo, eu vi várias bibliotecas Java (JMock é um exemplo) que usam encadeamento de métodos para simular um FP DSL. Em seguida, você verá construções como:
logger.expects(once()).method("error")
.with( and(stringContains(action),stringContains(cause)) );
Isso basicamente cria uma função que é avaliada para determinar se alguma sequência de chamada em um objeto simulado está correta. (exemplo roubado de http://www.jmock.org/yoga.html )
Outra sintaxe semelhante ao FP em outras linguagens OO é o uso de encerramentos, como em Ruby.