Hi. When I’m developing a website, I often do it on a virtual machine inside my own network, behind a NAT router, long before it becomes publicly accessible. Very often I’ll add something like dev.example.com to the hosts file to refer to the VM. And until LE came along, I’d set it up with a self-signed certificate.
It’s much better if I can use a proper certificate (not least because of the constant browser warnings, even though I know why they happen). If I have control over the domain name, I can use the DNS method to get a certificate, which is fine especially as my usual registrar has an API to their DNS to allow me to do this automatically.
But if I’m developing for someone else, especially a subdomain of an existing domain, I don’t have access to the DNS. The HTTP method won’t work because the server isn’t publicly accessible. Obviously, when I eventually make a publicly accessible staging version for the client, I can then use the HTP method then (and even if I put staging behind a password, I can make an exception for the acme-challenge directory).