Properties are a good way to expose class fields to other classes in an “encapsulated” manner. In practical usage (outside of theory or library design), they’re a useful way to sneak in some maintenance code when performing a get/set operation on a field variable. They’re also useful for creating fields that can’t be altered by certain classes.
For example, you can set your underlying field variable as Protected or Private, then only provide a Property getter to access it. If the field’s set to private, then only that class can change it directly — if it’s set to protected, then only that class and classes that inherit it can alter the field. That’s good for keeping people away from messing with variables where they’re not supposed to…