ARIA exists mainly for custom interface components built with JavaScript, like tabs, modal dialogs, dropdown menus, and live status messages, that don’t have a native HTML equivalent. It lets developers add a role (what the component is), and states and properties (like aria-expanded or aria-checked) that update as the user interacts with it.
The first rule of ARIA, as the specification itself states, is not to use ARIA if a native HTML element already does the job: a real button element is more robust than a div with role=”button” bolted on, since browsers and assistive technology handle native elements more consistently.