Modern imperative languages are constantly adding elements from functional languages. For example, take C++ templates - template metaprogramming is a pure functional style of programming. C++ 1x has added lambdas. Also things like STL algorithms such as accumulate and for_each or boost::bind - are essentially functional programming. C++ 1x was to have concepts which was removed but will hopefully return in the next standard. C# has added async and await. So your "masses" cannot avoid functional programming - they will be forced to learn it - since all imperative languages are going in that direction.
The advent of multicore programming will force this issue. Functional programs are much easier to execute in parallel. C++ has Microsoft PPL or Intel Threads libraries which are essentially functional algorithms. parallel_for with a lambda is one of the most useful parallel programming techniques. The equivalent imperative program will be far more verbose and cumbersome.
I actually believe C++ with the addition of Concepts and pure functions will make a very useful functional language. Yes it will be much more verbose than Haskell. Everything is. But then we will be able to use imperative style where required and functional style everywhere else. The functional parts can be easily parallelized. They can throw exceptions with impunity. Of course, there are some issues as to what constitutes "pure objects" and how to work around C++'s lack of a garbage collector. However people are already working on it. I believe Andrei Alexandrescu was working on something similar for D, which may be adopted to C++.