I just use a script on a cron that runs every 15 minutes and updates my DNS provider. And for let’s encrypt, I use the DNS verification method so you don’t have to even expose HTTP(S) ports if you don’t need to
Computer science is all about abstractions. You can keep on going down with your examples: VMs are an abstraction on top of an operating system, which is an abstraction on top of virtual memory, on top of a physical machine...
Just like Python is an abstraction on top of C, which is an abstraction on top of assembly language, which is an abstraction of a CPU and memory, etc.