Потому что 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);
});