If you use methods of an instance you know the object's state may or may not change. If you set attributes, you know for sure they changed. If you use a function that returns a new objects you know you paid the object allocation tax.
You can but it's not common. It's like saying you can write functional programing in C. You can but the whole ecosystem is not doing it.
If you set attributes, you know for sure that they changed at this particular place in the program but later in another position in the program, can you reason about the value of the object? You don't even who mutated it. And don't tell me "you can get its state", I'm talking about reasoning about the program here.
There is a reason why concurrent programming is more difficult than necessary with objects.
My point is that this implicit management of the state in "OOP" brings a lot of problems
Performance would suck, but that's life. You can't have your cake and eat it too.