Для 1: нет причины (правка: нет, есть: откладывается на выполнение через 500 мс после другого. Как кто-то заметил, setInterval - это путь туда), очевидно: возможно, автору нужен способ для симуляциинекоторый эффект «замедления» в фиктивной функции сохранения.
Для 2: чтобы setTimeout работал, вы НЕ должны возвращать функцию, но вы ДОЛЖНЫ делать то, как написан этот код: первый параметрsetTimeout - это некоторый код, который должен быть выполнен, и он вполне стандартен для передачи функции setTimeout (например, анонимной).Как в:
setTimeout(function() {
console.log("Hello world, 2 sec in the future");
}, 2000)