Because otherwise the main thread will be blocked while those operations take place and the whole ui will freeze
https://www.npmjs.com/package/@node-rs/argon2
https://www.npmjs.com/package/bcrypt
Though the bcrypt package does provide an additional sync API. (You should be using argon2 though.)
The only real use case would be small scripts where you don't care about sync/async, but experience shows that devs will abuse the sync functions in scenarios where the async ones would be appropriate.