I don't understand how does it work. If I'm using just desktop and don't have mobile phone or any specialized hardware, I can't login?
Correct. You'll need a FIDO key to log in in that case
What in the spec precludes this from being implemented in software?
[edit] Reading more of the spec it definitely seems like they meant for it to be possible to implement this in software. So while a physical FIDO device might be preferable, it shouldn't be necessary.
It looks like https://github.com/github/SoftU2F would work for that.
I believe Chrome’s dev channel also has experimental soft webauthn support.