Regarding your linked example (the react-typewritter discussion), I’m not sure I understand how changing
<span>’s content model would fix their issue. They want to be able to nest
<p>s inside their component, but at the same time, they want to be able to have any element as parent.
But that is impossible! If a component nests
<p>s, then it itself cannot be nested in, say, a
<p> or a
<h1> element. Instead, it must be nested in an element like
<section>. This issue it unrelated to whether a
<span> is used as a basis for the component, I think.
To clarify, for the use case of having a neutral element as a basis for a component, neither
<div> can satisfy all requirements, and the only workaround I can think of is to use the Shadow DOM. And since Shadow DOM currently isn’t widely supported, component authors have to define limits, e.g. if they want their component to be able to have any parent, they just cannot nest
<p>s or other block elements.