Как насчет того, чтобы не создавать/аппендить на каждой итерации новые элементы, а собирать вместо этого их в одну большую строку, которую затем разом положить в $("#st-selected-hotels-list .st-listbox-content")? Т.е. пусть checkableItem возвращает строку, а не элемент, и тогда будет что-то такое:
var str = '';
$.each(json.hotels, function(i) {
str += checkableItem(...);
});
$("#st-all-hotels-list .st-listbox-content").append(str);
// Обработку событий из checkableItem убираем, навешиваем обработчики отдельно
$("#st-all-hotels-list .st-listbox-content").on('mouseenter', '.st-checkable-item', function() {
$(this).addClass('st-highlight');
});
$("#st-all-hotels-list .st-listbox-content").on('mouseleave', '.st-checkable-item', function() {
$(this).removeClass('st-highlight');
});