Отличить можно. Но зависит от цели. В простейшем случае достаточно определить отлично ли от нуля положение курсора при событии:
<input type="button" value="button" id="Btn">
<input type="button" value="button.click()" onclick="document.getElementById('Btn').click()">
<script>
var btn = document.getElementById('Btn');
btn.addEventListener('click', function(event){
alert( event.clientX|event.clientY ? 'Вручную' : 'Скриптом' )
}, false)
</script>
Однако эти значения можно подставить и при искусственном вызове. Далее уже идут ухищрения для каждого браузера отдельно. Например в firefox есть свойство события isTrusted - который честно говорит вызвано событие скриптом или вручную.(в IE тоже есть такое свойство, только там оно не работает
)
Если цель борьба с накруткой или подобное - лучше использовать готовые решения.