На чем писать сервер чтобы усложнить декомпиляцию?
Переписывать все - не круто.
Достаточно небольшой кусок с ключевыми алгоритмами. 
Не обязательно весь сервер целиком.
Декомпиляция возможна всегда, но вопрос - на каком уровне будет декомпилированный код. Если ты получишь почти что ассемблер - смысла в декомпиляции мало.
Любой компилируемый в native подходит - Go, C/C++, Pascal, Haskell на порядки лучше, чем Python, Java, NodeJS.
Не забудь застрипать дебужные символы.
После чего декомпиляция из этого способна возродить назад такой ужас, в котором мало кто захочет разбираться задешево.
Но в конечном итоге все упирается насколько занитересован человек.
Если продукт очень массовый или очень дорогой - больше интереса взламывать.
А что, заказчик идиот?
Если он хочет заполучить сервер как некий гарант, то разве он не хочет еще и исходники?
Имхо, поддержка разработчика (устранение багов, которые и год спустя могут быть выявлены) существенный плюс, чтобы оставаться с вами.
мне кажется, что нет такого компилята который нельзя было бы расколдовать в исходый вид. можно выдавать лицензию под имя пользователя, на основе имени пользователя генерировать файл-лицензию (простыня шифрованых букв). Клинет сверяет данные на основе файла-лицензии и или запускается либо нет. А иметь пользователей с одинаковым именем в сети по-моему винда не разрешает.