Почему не работает (this).parent вместе с setTimeout?
Потому что 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);
});
Потому что 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);
});