Há cerca de 10 anos me deparei exatamente com a mesma situação que você e parti para a mesma solução: ionCube.
Hoje resolvo esse problema da forma mais simples: eu vendo apenas o serviço e mantenho toda a infraestrutura. Se o cliente quiser manter, ele que pague o equivalente a dois ou três anos vezes o valor mensal que eu cobraria. Fim.
Tenho clientes que pagam pelo serviço e me garantem renda recorrente. Tenho clientes que eventualmente compraram o software depois. Todas as partes felizes. Quer o código? Que pague.
É claro que no começo eu tive que me submeter a entregar código praticamente de graça. Cheguei até a ser roubado. Mas faz parte do crescimento. Hoje o meu código é fechado, a menos que o cliente pague por ele.