I think you are looking at this from a too detailed feature-for-feature point of a view.
I'd see the major advantage of immutability by default of functional programming langauges to be on how it affects the actual programming mind set of the developer. When mutation is the default, the programming mind set is geared towards solutions by mutating the data. When immutability is the default, the programming mind set is geared towards solutions by transforming the data.
To elaborate on why the latter mind set is better. When developing programs through mutating the data, you end up getting bogged down in fine details, so your focus tends to be on how the program works 'in the small'. When developing programs through transforming the data, you don't need to worry about many of the fine details (such as how different mutating parts of your program interact with each other), and your focus tends to be on how the program works 'in the large'. So, the latter mind set gears the developer towards having a better and clearer 'big picture' on how the program works.
While having a nice clean 'big picture' of a program is nice, in some cases, real life concerns can outweigh it. Some data structures (arrays, multi dimensional arrays), are not good candidates for immutability because of the high cost of making new copies, so some common sense should always be applied on when to not use immutability even with functional languages.
Edit to answer the comment:
Functional language purists would argue that it would make the code uglier. I consider myself not to be a purist, so I don't think so; well, perhaps uglier from a theoretical point of a view.
F# is an impure functional programming language, so it supports mutability when it's needed. Having part of your state be mutable doesn't invalidate the benefits of having most of your state be immutable.
In most cases, you end up using a different (pure) data structure where you would normally use an array in an imperative language. E.g. a tuple, a list or a tree (or a set/map build on top of a tree; the standard libraries usually come with implementations with good time complexity).
And if you think that you really need a mutable array (for performance reasons), you have it available, so nothing is stopping you from using one.