Respostas:
@Override não estava originalmente no idioma. Quando sentimos a necessidade de adicioná-lo, era mais fácil usar um mecanismo genérico (anotações) do que adicionar uma nova palavra-chave ao idioma. A adição de uma nova palavra-chave é sempre uma alteração incompatível, pois pode interromper os programas que usam essas palavras como identificador.
Nas linguagens que adicionam um marcador de substituição desde o primeiro dia, muitas vezes é uma palavra-chave (os exemplos são Kotlin e Scala); em Java, era uma questão de permanecer compatível com versões anteriores da versão Java mais antiga que não tinha nenhum marcador de substituição.
defaultjá era uma palavra-chave reservada (usada nas instruções do switch) - eles adicionaram um novo uso a ela. Existem também algumas palavras-chave que não fazem nada no momento, mas são reservadas para uso futuro (const, goto) - consulte JLS §3.9
Você não precisa da anotação @Override para substituir o comportamento; É uma anotação porque simplesmente adiciona algum contexto da intenção do método ao compilador, não alterando o próprio método.
Sem a anotação, você pode pretende a funcionalidade de substituição, mas acidentalmente deixar de fazê-lo (usando uma assinatura ligeiramente diferente). A adição da anotação informa ao compilador para gerar um erro se esse método não estiver substituindo o comportamento.
Como tal, faz todo o sentido como uma anotação.