Vocabulary
You never write a raw HTML tag. Semantic elements come from a typed menu on the primitives, and the menu is short on purpose.
When a layout primitive needs to be a landmark or a list item, it takes an as prop typed as a closed union of allowed elements, not a raw <section> or <li>. Ask for an element that is not on the menu, such as as="button", and it does not compile: the answer to a button is the Button component.
Raw tags fail the lint. The no-naked-element gate runs at error on every build, so an ordinary element in application code breaks the build. Between the typed union and the gate, the set of elements you can use is finite and known.
Replacements
Each raw tag maps to one replacement. Using the tag itself fails the lint.
Icons
Raw glyphs take whatever size and stroke the author types. Icon takes a size token and renders at a fixed stroke of 1.5.
The one escape hatch
Primitives still take className, so one-off layout is never blocked. The tokens-only gate rejects raw hex, colour functions and arbitrary values in class strings, so even a bespoke tweak is written in the design language. The rules behind both are on the principles page.