Самое главное это то, что $timeout обновляет скоуп (всякие данные на страничке изменятся), а простой setTimeout ничего не обновит в скоупе (данные на страничке как были так и будут старые).
Еще самое главное — $timeout ни в коем случае не является заменой setTimeout!!!
Если у вас функционал, который работает с данными скоупа и биндит переменные, то используйте $timeout, если же вам просто нужно что-то исполнять по таймауту (например, раз в секунду что-то делать, потом, через секунду, опять, и так далее, но не связанное с обновлением данных скоупа), то используйте setTimeout. Тобишь, $timeout запускает $digest-цикл и перерисовывает страничку — вот и представьте, если вы каждую секунду будете перерисовывать страничку.