You can write FP in a natural way (using non-mutable functions and data) where the code is automatically scalable over hundreds or thousands of processors. It has built-in super-scalability.
The trade-off is that the code is butt-ugly, at least in this C# programmer's view.
It's not the butt-ugly code, but the copying. Yes, there are tricks to avoid copying an array just to update one element (if you don't have side effects ....), but at some point you just want to modify something.
I don't know much about C#, but functional code in functional languages is beautiful. Attractiveness of functional vs. imperative code seems to have more to do with the intentions of the language desires than anything inherent to the language. Take Ocaml, for instance. The syntax for imperative structures and object-oriented programming is very ugly, but the syntax for functional programming is beautiful.
The really beautiful thing about OCaml, I think, is that it lets you do either when you need to and just encourages you to give the imperative code a clean functional interface.
The trade-off is that the code is butt-ugly, at least in this C# programmer's view.