В коде JS зашить бекдор или плановое устаревание, а сам код сильно обфусцировать. После оплаты предоставить клиенту бесплатное обновление без всего этого. Если клиент захочет исходники, то также только после оплаты. Универсальных рецептов нет.
Но об этом надо думать заранее. А когда УЖЕ отдал готовый проект, то ситуация такая же, как если вы захотите сделать плохо любому другому незнакомому человеку. Сразу скажу, что это возможно. Но вам придется тратить СВОИ время и силы на то, чтобы сделать плохо. Это называется месть (а не справедливость, как вы сказали). В целом, месть - это не очень разумно, имхо. Но реально. Так что если хотите, можете заниматься этим. Для этого нужно будет изучить врага, что ему дорого, слабые места, и бить по ним. Например, затаскать по судам (тратить время клиента, даже если проиграете). Или бить по репутации, по отзывам и т.д. Можно, например, агрессивно продвигать сайт клиента за свой счет, чтобы в какой-то момент поисковики исключили его из выдачи. Ну хотя я не в курсе, сработает ли такое в наши дни. Но суть та же - это война. В общем, дорогое удовольствие. Не советую. Проще в будущем быть мудрее.