Why hasn't functional programming taken over yet?
Functional is better for some things and worse for others so it will never "take over". It is already ubiquitous in the real world though.
Stateless programs; No side effects
Stateless programs are easier to test. This is now widely appreciated and often exploited in industry.
Concurrency; Plays extremely nice with the rising multi-core technology
Programs are usually shorter and in some cases easier to read
Productivity goes up (example: Erlang)
You're conflating concurrent and parallelism.
Concurrency can be done effectively using communicating sequential processes (CSP). The code inside a CSP can mutate its local state but the messages sent between them should always be immutable.
Purely functional programming plays extremely badly with multicore because it is so cache unfriendly. Cores end up contending for shared memory and parallel programs don't scale.
Why are companies using or programs written in functional languages still so "rare"?
Scala is often regarded as a functional language but it is no more functional than C# which is one of the most popular languages in the world today.
Why, when looking at the advantages of functional programming, are we still using imperative programming languages?
Purely functional programming has lots of serious disadvantages so we use impure functional languages like Lisp, Scheme, SML, OCaml, Scala and C#.