При каждом вызове функции объявляется новая переменная и создаётся новый интервал. Интервал-то останавливается, но не тот, который был создан при предыдущем вызове, а новый.
var snake = {
interval : {
right : function (start){
if( start == "stop"){
clearInterval(this.inter);
} else {
this.inter = setInterval(function(){}, 500)
}
}
}
};
snake.interval.right();
snake.interval.right("stop");
В этом случае id интервала будет лежать в snake.interval.inter, и вызов с "stop" будет останавливать именно его.