Minha solução é fixa: internet. Apenas isso. Se o cliente não tiver, só lhe dou uma opção: instalar a internet, discada que seja. Eu sei que, infelizmente, não é todo mundo que pode proceder desta forma. Pra isso existem as técnicas de identificação do hardware presente em cada máquina. Mas como é hardware, sempre se cairáno que você comentou: se quebrar, troca. Se trocar, muda a identificação. Aí não tem jeito. O programador terá de reinstalar. E pior: dificilmente o cliente vai querer pagar por isso.
Uma outra alternativa, inclusive, é montar um "contâiner" de dados armazenados num arquivo. Claro que esse arquivo pode ser replicado. Mas se esconder e o sujeito formatar a máquina, volta o problema inicial. Se o deixar no diretório de instalação, um sujeito mal intencionado pode copiar.
Em suma: se correr o bixo pega, se ficar o bixo come.

))