It's all about how other clients treat branches and tags.
Once you've pushed a tag, no other clients will be willing to update their definition of that tag unless the users on those other devices force the issue.
So operationally, "tags are immutable once pushed" is a pretty reasonable way to look at things.
Remotely pushed branches of course also won't allow you to do anything but append without forcing on remote clients, so mutable and immutable isn't quite right, here.
So I guess I agree with your original contention, branches are mutable-and-you-can-ride where ride means "the remote client's porcelain will be happy with append mutations".