Проблема заключается в том, что hide() без каких-либо параметров является непосредственной операцией. Он не проходит через очередь fx, поэтому он не приходит после .delay(5000). Но если вы даете длительность функции типа .hide(1), то она становится анимацией и проходит через очередь fx и, таким образом, выйдет после .delay(5000).