Hola, la diferencia es bastante grande.
Te hago un pequeño, muy superficial, resumen y comparación:
En ambas, se trata de encarar un problema desde dos puntos de vista completamente diferentes: mientras que en la programación orientada a objetos es imperativa, la programación funcional es declarativa.
En general, en la programación imperativa está presente el concepto estados: tu programa a medida que se ejecuta va cambiando su estado. En el caso concreto de los objetos, lo que cambia es el estado de los mismos.
Una máquina de Turing (una máquina abstracta), es una máquina de estados y se relaciona directamente con la forma imperativa de programación.
La programación funcional nace del cálculo lambda de Alonso Church, y se basa directamente en el concepto de funciones matemáticas. Las funciones no producen efectos secundarios, esto quiere decir, que no modifican cosas externas, y siempre a valores iguales de entrada se obtiene lo mismo de salida. Se utiliza muchísimo el concepto de recursividad, no existen los ciclos iterativos por ejemplo, todo se hace de forma recursiva, no hay asignaciones destructivas.
Digamos que en la programación imperativa, vos pones atención en que instrucciones ejecutar para resolver un problema, mientras que en la declarativa, pones atención, en restricciones y reglas, que funcionan de forma independiente para que luego mediante un mecanismo interno interactúen entre ellas.
Espero que te de una leve idea.
¡Salut!