(I have little experience with Tailwind, but I can still make the following argument)
I think you're making a mistake in assuming that the example shows how you should actually use Tailwind in a project.
The creator himself has said that Tailwind should be combined with whatever component-system your framework provides. That's how you can get your semantic tags.
...and it's also how you should write Websites anyways - this has little to do with Tailwind. Tailwind can be seen as just a more powerful way of writing inline styles.
If you rely on CSS for reusable components, you may be in for a bad time as soon as you need to make even a tiny change in your design.
The ol' theory vs. practice…that all sounds fine in theory, but all it means in the end is you've taken a giant wad of dig/span tag soup with 30 utility classes and broken it up into reusable bits of tag soup with utility classes. Or you move everything over to @apply…but now you have a bunch of stylesheets which are completely incompatible with every other CSS framework/build system. It's not a panacea.
Nothing's stopping you from using custom-elements inside your components. (In fact, some frameworks like Aurelia are even built around that).
If you don't like frameworks, use Web Components.
I think you're making a mistake in assuming that the example shows how you should actually use Tailwind in a project.
The creator himself has said that Tailwind should be combined with whatever component-system your framework provides. That's how you can get your semantic tags.
...and it's also how you should write Websites anyways - this has little to do with Tailwind. Tailwind can be seen as just a more powerful way of writing inline styles.
If you rely on CSS for reusable components, you may be in for a bad time as soon as you need to make even a tiny change in your design.