Existem algumas coisas nas outras respostas que são pouco expressas ou talvez um pouco incorretas.
FALSE (ish): elementos HTML não padrão são "não permitidos", "ilegais" ou "inválidos".
Não necessariamente. Eles são "não conformes" . Qual é a diferença? Algo não pode "estar em conformidade" e ainda pode ser "permitido". O W3C não vai enviar a polícia HTML para sua casa e levá-lo embora.
O W3C deixou as coisas assim por uma razão. Conformidade e especificações são definidas por uma comunidade. Se houver uma comunidade menor consumindo HTML para fins mais específicos e todos concordarem com alguns novos elementos de que precisam para facilitar as coisas, eles podem ter o que o W3C chama de "outras especificações aplicáveis" . (é uma simplificação grosseira, obviamente, mas você entendeu)
Dito isto, validadores estritos declararão seus elementos não padrão como "inválidos". mas isso ocorre porque o trabalho do validador é garantir a conformidade com qualquer especificação que esteja validando, não garantir a "legalidade" do navegador ou do uso .
FALSE (ish): elementos HTML não-padrão irá resultar em problemas de processamento
Possivelmente, mas improvável. (substituir "será" por "pode") A única maneira de resultar em um problema de renderização é se o seu elemento personalizado entrar em conflito com outra especificação, como uma alteração na especificação HTML ou outra especificação sendo honrada no mesmo sistema (como SVG, Math ou algo personalizado).
De fato, o motivo pelo qual o CSS pode estilizar tags não padrão é porque a especificação HTML afirma claramente que:
Os agentes de usuários devem tratar elementos e atributos que eles não entendem como semanticamente neutros; deixando-os no DOM (para processadores DOM) e estilizando-os de acordo com CSS (para processadores CSS), mas sem inferir nenhum significado deles
Nota: se você quiser usar uma tag personalizada, lembre-se de que uma alteração nas especificações do HTML posteriormente poderá aumentar seu estilo, portanto, esteja preparado. No <imsocool>
entanto, é realmente improvável que o W3C implemente a tag.
Tags não padrão e JavaScript (via DOM)
O motivo pelo qual você pode acessar e alterar elementos personalizados usando JavaScript é porque a especificação fala sobre como eles devem ser tratados no DOM , que é a API (realmente horrível) que permite manipular os elementos em sua página.
A interface HTMLUnknownElement deve ser usada para elementos HTML que não são definidos por esta especificação (ou outras especificações aplicáveis).
TL; DR: A conformidade com as especificações é feita para fins de comunicação e segurança. A não conformidade ainda é permitida por tudo, exceto por um validador , cujo único objetivo é impor a conformidade, mas cujo uso é opcional.
Por exemplo:
var wee = document.createElement('wee');
console.log(wee.toString()); //[object HTMLUnknownElement]
(Tenho certeza de que isso atrairá chamas, mas há meus 2 centavos)