Как скомпилировать jar в exe без возможности открыть файл как архив?
Excelsior JET некогда решал данную задачу.
Следует уточнить. Существуют 2 подхода:
1. SFX like
2. Загрузчик читающий прямо из секций файла

Первый содержит стаб который на время выполнения программы распаковывает jvm и ваше приложение в отдельную директорию, где собственно можно все и увидеть. Плюс если покопаться в экзешнике можно вырезать нужную секцию и распаковать

Второй не создает мусора и работает транслируя запросы, добраться сложнее, но в памяти все равно есть ваше приложение.

В общем все зависит от настырности реверсера. 
С вашей же стороны в какой то момент легче прикрытся лицензионным соглашением вместо того что бы тратить усилия на защиту