Потому что setTimeout никакого отношения к промисам не имеет и "запускает отдельный поток"(на самом деле нет, но так проще для понимания, детали подождут). Промисы вещь в себе, промис ожидает только другой промис.
Promise.resolve() //тоже самое что ваша func только встроенное
.then(() => {
return new Promise(
resolve => setTimeout(() => {
console.log(1);
resolve();
}, 0)
);
})
.then(() => console.log(2))