мне кажется вообще setTimeout никак не будет относится к определению чистой функции, если функция асинхронная и там всегда будет возвращаться что-либо после таймаута и он действительно там нужен и все остальные определения чистой функции соблюдены, то ок