Как работает отрицание функции?
Читаем и просвещаемся ))
Непонятно, как в общем работает отрицание функций в JS
никак, нет такого понятия "отрицание функции".

функция вызовется, что-то вернет и к этому значению применится оператор "!" 
в данном случае функция возвращает true или false, соответственно будет if (!true) или if (!false). как это работает вы я думаю уже должны знать. 
по простому - в этом примере если вызов compareObjects для ключей объектов вернул false (свойства key в а и b не равны) то возвращаем false (объекты a и b тоже не равны)