The important thing to notice in their example is the assignment to 'a' when pushing items (`a = a->push(1);`), and the ability to reassign the new change to a new variable (`auto b = a->push(4);`). That last command keeps 'a' the same (hence "immutable" data structure), but creates a new variable 'b' to hold the new data.
This technique allows you to, for example, pass the same data structure to multiple threads without worrying that they will simultaneously change data (race conditions).
More information can be found here https://en.wikipedia.org/wiki/Persistent_data_structure (check out the linked list and tree diagrams in examples).
For this to work properly in C++, I think you'd need to const all types for it to be effective (immutable::Array<const MyStruct>).
I'd really like to see benchmarks comparing these structures implemented in C++ vs those in functional languages; I don't know if the compiler optimization algorithms produce similar code.