It is possible for Apache to be configured without virtual hosts.
For instance, if your configuration was just:
Apache would work just fine, but it would do so without any virtual hosts.
Virtual hosts refer to a specific way of enabling Apache to serve multiple websites from a single instance. You can find the documentation for them here: https://httpd.apache.org/docs/2.4/vhosts/
As I understand it, Certbot’s Apache plugin relies on the presence of virtual hosts to understand how your websites are split up and how to apply configuration changes to individual sites.
In my previous example, if you tried to run Certbot against such an Apache configuration, it would surely complain:
Unable to find a virtual host listening on port 80 which is currently needed for Certbot to prove to the CA that you control your domain. Please add a virtual host for port 80.
However, this can easily be addressed by re-forming that piece of configuration as a virtual host:
With this variant, Certbot is able to understand your Apache configuration and do its job in issuing and installing a certificate.
I believe it is has been a best practice for some time to configure all websites as name-based virtual hosts. Most Linux distributions configure their Apache packages by default using virtual hosts.
I hope that somewhat addresses your question.