Ninguém na comunidade REST diz que REST é fácil. HATEOAS é apenas um dos aspectos que adiciona dificuldade a uma arquitetura REST.
As pessoas não praticam HATEOAS por todos os motivos que você sugere: é difícil. Ele adiciona complexidade tanto ao lado do servidor quanto ao cliente (se você realmente quiser se beneficiar com isso).
NO ENTANTO, bilhões de pessoas experimentam os benefícios do REST hoje. Você sabe qual é a URL de "checkout" na Amazon? Eu não. Ainda assim, posso fazer checkout todos os dias. Esse URL mudou? Não sei, não me importo.
Você sabe se importa? Qualquer pessoa que escreveu uma tela raspou o cliente automatizado da Amazon. Alguém que provavelmente farejou meticulosamente o tráfego da web, leu páginas HTML etc. para descobrir quais links chamar, quando e com quais cargas úteis.
E assim que a Amazon mudou seus processos internos e estrutura de URL, esses clientes codificados falharam - porque os links quebraram.
No entanto, os surfistas casuais da web conseguiam fazer compras o dia todo sem nenhum problema.
Isso é REST em ação, é apenas aumentado pelo ser humano que é capaz de interpretar e intuir a interface baseada em texto, reconhecer um pequeno gráfico com um carrinho de compras e descobrir o que isso realmente significa.
A maioria das pessoas que escrevem software não faz isso. A maioria das pessoas que escrevem clientes automatizados não se importa. A maioria das pessoas acha mais fácil consertar seus clientes quando eles quebram do que projetar o aplicativo para não quebrar em primeiro lugar. A maioria das pessoas simplesmente não tem clientes suficientes onde é importante.
Se você está escrevendo uma API interna para se comunicar entre dois sistemas com suporte técnico especializado e TI em ambos os lados do tráfego, que são capazes de comunicar as mudanças de forma rápida, confiável e com um cronograma de mudanças, então o REST não compra nada. Você não precisa disso, seu aplicativo não é grande o suficiente e não dura o suficiente para ser importante.
Grandes sites com grandes bases de usuários têm esse problema. Eles não podem simplesmente pedir às pessoas que alterem seu código de cliente por capricho ao interagir com seus sistemas. O cronograma de desenvolvimento de servidores não é o mesmo que o cronograma de desenvolvimento do cliente. Mudanças abruptas na API são simplesmente inaceitáveis para todos os envolvidos, uma vez que interrompe o tráfego e as operações em ambos os lados.
Portanto, uma operação como essa provavelmente se beneficiaria com o HATEOAS, pois é mais fácil de criar versões, mais fácil para clientes mais antigos migrarem, mais fácil ser compatível com versões anteriores do que não.
Um cliente que delega grande parte de seu fluxo de trabalho para o servidor e age de acordo com os resultados é muito mais robusto para alterações no servidor do que um cliente que não o faz.
Mas a maioria das pessoas não precisa dessa flexibilidade. Eles estão escrevendo código de servidor para 2 ou 3 departamentos, é tudo para uso interno. Se ele quebrar, eles consertam e incluem isso em suas operações normais.
Flexibilidade, seja de REST ou qualquer outra coisa, gera complexidade. Se você quer algo simples e rápido, você não o torna flexível, você "apenas faz" e pronto. Conforme você adiciona abstrações e desreferenciamento aos sistemas, as coisas ficam mais difíceis, mais clichê, mais código para testar.
Muito do REST falha no ponto de bala "você não vai precisar". Até, claro, você fazer.
Se precisar, use-o e use-o como está definido. REST não está empurrando coisas para frente e para trás no HTTP. Nunca foi, é um nível muito mais alto do que isso.
Mas quando você precisa de REST e usa REST, o HATEOAS é uma necessidade. É parte do pacote e a chave para o que o faz funcionar.