Следует уточнить. Существуют 2 подхода:
1. SFX like
2. Загрузчик читающий прямо из секций файла
Первый содержит стаб который на время выполнения программы распаковывает jvm и ваше приложение в отдельную директорию, где собственно можно все и увидеть. Плюс если покопаться в экзешнике можно вырезать нужную секцию и распаковать
Второй не создает мусора и работает транслируя запросы, добраться сложнее, но в памяти все равно есть ваше приложение.
В общем все зависит от настырности реверсера.
С вашей же стороны в какой то момент легче прикрытся лицензионным соглашением вместо того что бы тратить усилия на защиту