Just like Smalltalk, which has no concept of immutable types, other than only providing accessor messages, which is an active decision by the class implementer.
Well, as I understand it, it achieves that by making the message passing extremely fine grained. So, in a sense all the messages are immutable, but only by creating a hairball of objects and messages.
Maybe I should be thinking about what sending references to objects in messages means.