Dependendo do seu setup (por exemplo, sistema instalado em uma única filial de uma loja, com um ou dois usuários), eu usaria uma VPN mesmo e acesso remoto via VNC ou Remote Desktop. Não é isso que você quer, pelo jeito.
Para melhorar a segurança é bom pôr uma VPN para trafegar os dados, mas nesse caso, devido à quantidade de clientes, é melhor trafegar só os dados, não as telas inteiras como eu havia sugerido.
Eu usaria algo como Web Service (tipo REST, não SOAP) porque posso usar um cliente .NET, C++, Delphi e também Java. E você sabe que é bem mais fácil criar uma aplicação cliente em C#/VB.NET que em Java/Swing, ainda mais que você precisa acessar periféricos (impressoras, leitoras de código de barras, etc.) que são meio enjoadas de trabalhar em Java.
RMI deixa os dois lados amarrados em Java, o que é um grande problema.
E RMI não funciona direito em internet.