macOS does support EVFILT_TIMER, unfortunately the man pages that Apple hosts are very out-of-date. A more recent page (https://www.manpagez.com/man/2/kqueue/osx-10.13.1.php) shows support, and it's been there since at least 10.9 (2013).
I created an issue for another async system showing them how to do it. They closed the issue saying “MacOS doesn’t support that”. I reckon people don’t know how to actually research these things if it’s not 1-click away.