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.