Какие есть эффективные способы защиты формы от ручного спама?
от ручного ввода может помочь только обученный спам-фильтр на сервере. 
например, spamassassin, если сообщения валятся на мыло.
А ваша форма как отправляется?
Важно настроить строгую проверку, чтобы гарантировать что данные на сервер приходят именно с этой формы. 
Далее, можно в JS поставить проверку Event.isTrusted
Разного рода капчи. В этом смысле хорош reCaptcha -- она может заставить пользователя пройти проверку 3-4 раза, даже если он всё правильно вводит.

Полностью защитится от ручного спама на клиенте скорее всего никак. Но можно его значительно усложнить. Злые капчи, стоп слова и прочее. Достаточно добиться чтобы спамить вас стало не выгодно (по затратам времени/денег).