Answer by Robert Harper:
The lack of persistent data structures in imperative languages is their chief drawback. Good functional languages support both persistent and ephemeral data structures with ease. Having both is strictly better than having only one. It's not a matter of functional programming per se, it's a matter of expressive power of a language.