Как защитить передаваемую заказчику систему?
железо заказчика
нужно обеспечить условия отсутствия доступа со стороны заказчика к содержимому на железе
Это пункты, которые изначально противоречат друг другу.
Если ПО работает на железе заказчика, который имеет к нему физический доступ, то это ПО невозможно надежно защитить по определению (можно лишь создать некоторые препятствия). Все будет зависеть лишь от "заинтересованности" заказчика этой системой.
По этой же самой причине нету софта, который невозможно крякнуть.
Аппаратно можно сделать уничтожение данных при вскрытии. Полагаю корпус должен быть заменен на сейф, для хоть каких то гарантий.

Точно знаю что есть серийные устройства, рассчитанные на это (первое что гуглится в россии - РОСКАТ но есть и другие, есть и для hdd и ssd, сам не видел что это такое так что не воспринимайте как рекламу).

Кстати нет необходимости уничтожать все данные, достаточно минимальный загрузчик, в котором хранятся ключи шифрования диска и сертификаты для связи с сервером. 

Теперь про загрузчик. Правильная реализация - подписанный загрузчик ключом исполнителя (не все десктопные материнки позволяют заменить ключ на свой, серверные многие), т.е. secure boot биоса будет следить за тем что никакой чужой загрузчик не будет запущен, а свой загрузчик может к примеру ждать подключение по сети с сервера разработчика, который уже проверяет что загрузчик не модифицирован (например через чтение памяти и тесты производительности процессора, чтобы исключить простую атаку через гипервизор) и вводит пароль на расшифровку дисков. Этот тип защиты взламывается очень дорого, через специализированные устройства, подключаемые на линию pci.

linux для этого подходит идеально, так же многие гпервизоры виртуализации умеют шифровать не только диски но и оперативную память виртуальных машин (в современных процессорах даже фича для этого встроена).