Javascript — асинхронный язык. Означает ли это, что мой код может выполниться «неправильно»?
Операции выполняются последовательно.
Некоторые известные программисту выражения могут откладывать асинхронные личинки )
При этом сами выражения выполняются синхронно-последовательно и тут же за ними выполняются следующие строки. Но личинка асинхронности отложена и зреет! )let $some_elem = $('.some_elem');          // 1
$some_elem.addClass('some_class');         // 2
setTimeout(() => alert("Созрели!"), 1000); // 3 отложили
$('.some_class').remove();                 // 4
// этот код выполнился до конца и, казалось бы, делать больше нечего.

// ...через секунду сработал alert
Тут setTimeout() отрабатывает мгновенно-синхронно - его функция отложить личинку на через-секунду. Представьте, что setTimeout пушит функцию и её время в некий невидимый служебный массив движка JS. А движок заглядывает в этот массив по 100 раз в секунду, когда свободен, не занят выполнением кода, и смотрит, «есть чё?», что пора выполнить?
Сразу за отработавшим setTimeout() (но никакого alert ещё не случилось) выполняется следующая строка $('.some_class').remove();
Подробнее читайте про event loop.
javascript - 100% синхронный язык, пока вы не вызываете асинхронные функции, такие как SetTimeout, setInterval или Promise. Но даже порядок выполнения асинхронных функций, точнее порядок их запуска, предсказуем. В вашем случае все естественно будет выполняться в том порядке как написано, иначе это было бы полнейшим абсурдом.