For me, the fundamental problem with web components is that attributes are limited to strings, so for anything even mildly complicated you have to stick something weird on top of them that serializes/deserializes things all the time.
And component logic is very imperative and error prone... e.g attributeChangedCallback and batched renders. The webcomponent spec feels so outdated already compared to what modern libs do.