Потому что this это служебная переменная указывающая на текущий контекст.
Когда setTimeout вызывает анонимную функцию, то передает ей свой контекст.
Поэтому this до вызова setTimeout один, а в анонимной функции другой.
Для правильной работы вашего примера нужно воспользоваться замыканием и написать примерно так.
$(".fav-del").click(function(){
   $(this).parent(".fav-tov").addClass("opacity");
   var that = this;
   setTimeout(function(){ $(that).parent(".fav-tov").addClass("none"); }, 500);
});