If pseudo-elements were valid selectors within :has(), the following code will lead to style cycles (loops) in CSS:
.item::before {
content: "";
} /* will render the ::before pseudo-element... */
.item:has(::before)::before {
content: none;
} /* will eliminate the ::before pseudo-element... */