The client is written in python. pip is a package manager for python, while virtualenv is a tool to manage isolated environments for python projects (i.e. foo depends on version x of pip package bar, etc.)
The official client does a lot more than just generating certificates (like automatically configuring web servers, managing a folder structure for certificates, etc); that is the main reasons for all those dependencies.
Take a look at the list of client implementations for various other clients for Let’s Encrypt. Let’s Encrypt uses an open protocol to issue certificates, for which the official client is just one of many implementations, all of which have different goals and use-cases. simp_le and letsencrypt-nosudo are very simple to, have a smaller dependency graph and follow the unix philosophy quite closely, maybe try one of those.