The documentation may need a little update but I think the idea is that you want to write an immutable class to save it from changes from outside (acc.balance = 1.0 does throw ReadOnlyPropertyException). If the class itself decides to break its own immutability, then @Immutable does not prevent it from doing so.
Another way of a class breaking its own immutability is providing an explicit setter for the property, as mentioned in the @Immutable documentation:
You don't have to follow Groovy's normal property conventions, e.g. you can
create an explicit private field and then you can write explicit get and set methods.
Such an approach, isn't currently prohibited (to give you some wiggle room to get
around these conventions) but any fields created in this way are deemed not
to be part of the significant state of the object and aren't factored
into the equals or hashCode methods. Use at your own risk!
@Immutable needs the support of good intentions of the class author