The main thing you have to really wrap your mind around are the recursive functions instead of loops. Functional languages like haskell do not use loops, but instead build (tail) recursive functions which can exactly achieve the same thing.
Monads are quite tricky to understand, I refer you to this article to learn more about it.
Another big difference is that pure functional languages prefer immutable objects (functions, data structures, arguments). So if you want to keep track of state, you really have to pass it on as argument, or use specialized monads. Functions with side effects are nicely wrapped in special monad's so that you can distingush them from pure code.
In functional programming there are lot's of datastructures and the possibility to easily create new ones are endless. Instead of thinking in 'business objects' you might want to think in data types. These can be nicely used in pattern matching for your functions, so you can seperate functionality for different patterns in your datatype
data Gender = Man | Women
greet :: Gender -> String
greet Man = "Hello sir!"
greet Women = "Hey, how YOU doing ;)"
This are some of the big differences in programming, hopefully others will be able to add some more.
One thing you should always remember is that anything coded in an imperative language can also be coded in a functional language. Nothing is impossible!