Oi Otávio, obrigado.
Dando uma lida no site, achei este trecho, e usei o tradutor mesmo porque ficou bom:
Compreendendo as dependências do JJWT
Observe que todas as declarações de dependência acima têm apenas uma dependência de tempo de compilação e as demais são declaradas como dependências de tempo de execução.
Isso ocorre porque o JJWT é projetado para que você dependa apenas das APIs que são explicitamente projetadas para serem usadas em seus aplicativos e todos os outros detalhes de implementação interna - que podem ser alterados sem aviso - são relegados para dependências somente de tempo de execução. Este é um ponto extremamente importante se você deseja garantir o uso estável do JJWT e atualizações ao longo do tempo:
O JJWT garante compatibilidade de versão semântica para todos os seus artefatos, exceto o jjwt-impl.jar. Essa garantia não é feita para o jjwt-impl.jar e alterações internas nesse .jar podem acontecer a qualquer momento. Nunca adicione o jjwt-impl.jar ao seu projeto com escopo de compilação - sempre declare-o com escopo de tempo de execução.
Isso é feito para beneficiá-lo: muito cuidado é dedicado à curadoria do jjwt-api.jar e garantindo que ele contenha o que você precisa e permaneça compatível com versões anteriores tanto quanto possível para que você possa depender disso com segurança com o escopo de compilação. A estratégia de runtime jjwt-impl.jar oferece aos desenvolvedores JJWT a flexibilidade de alterar os pacotes internos e implementações quando e como for necessário. Isso nos ajuda a implementar recursos, corrigir bugs e enviar novos lançamentos para você de forma mais rápida e eficiente.
O que entendi: os pacotes .impl serve para alterar o comportamento da API?