I think the meaning was that you can't add or remove elements from a slice, but you can with a Vec. When it comes to mutating the elements themself however they are equivalent. The documentation is pretty misunderstandable though.
"Slices are immutable" is not a great way to put it. Just like any other type, slices aren't inherently mutable or immutable.
If you take a mutable reference to a slice, you can mutate its elements. If you take a shared reference to a slice, you may or may not be able to mutate its elements (depending on whether the elements themselves contain interior mutability).
I agree that it probably wanted to express that the length of a slice can't be changed, but the phrasing is certainly ambiguous at best, misleading/incorrect at worst.
This is one case where the official documentation (and most other places) use pretty sloppy terminology. "Slice" is used for all of
[T] which is unsized
&[T] which is a shared (T may or may not have or contain shared mutability, but you can't replace any element itself say)
&mut [T] which is exclusive (each element can be replaced or mutated)
And with &[T] or &mut [T], the reference-to-slice may itself be mutable (so you can make it point to a different slice). For example consider this implementation of Read for &[u8], where the shared slice (Self: &[u8]) is shortened when bytes are read.
The documentation on that page should definitely be improved.
Now you're getting into the philosophical problem of whether an e.g. i32 is "actually" mutable or just replaceable, but that's eventually a "no true Scotsman" argument that nobody wins.
Easier to talk about whether a "place" (result of an expression) is mutable, perhaps, rather than a type.