You have already highlighted the main steps of this process: certificates and delegating mail services from web to mail server.
Regarding the certificates I would recommend to use different hostnames for mail and web server and as well different certificates.
As you are using Let's Encrypt - most use cases of its tools are for web servers. The ACME protocol needs a check that you are in control of your domain name. This works fine with web resources. The certbot (or any other tool supporting ACME) will put a simple file into your webroot and tells Let's Encrypt to check it via HTTP or HTTPS request.
For your mail server this doesn't work. But if you use any compatible DNS provider (such as Amazon Route 53 or DNS Made Easy or ...) you can do the same without a web server.
See following list regarding supported DNS provider plug-ins in Certbot:
--dns-cloudflare Obtain certificates using a DNS TXT record (if you are
using Cloudflare for DNS). (default: False)
--dns-cloudxns Obtain certificates using a DNS TXT record (if you are
using CloudXNS for DNS). (default: False)
--dns-digitalocean Obtain certificates using a DNS TXT record (if you are
using DigitalOcean for DNS). (default: False)
--dns-dnsimple Obtain certificates using a DNS TXT record (if you are
using DNSimple for DNS). (default: False)
--dns-dnsmadeeasy Obtain certificates using a DNS TXT record (if you
areusing DNS Made Easy for DNS). (default: False)
--dns-google Obtain certificates using a DNS TXT record (if you are
using Google Cloud DNS). (default: False)
--dns-luadns Obtain certificates using a DNS TXT record (if you are
using LuaDNS for DNS). (default: False)
--dns-nsone Obtain certificates using a DNS TXT record (if you are
using NS1 for DNS). (default: False)
--dns-rfc2136 Obtain certificates using a DNS TXT record (if you are
using BIND for DNS). (default: False)
--dns-route53 Obtain certificates using a DNS TXT record (if you are
using Route53 for DNS). (default: False)
See following example how it works for Amazon's Route53:
# set AWS API credentials
export AWS_ACCESS_KEY_ID="1234567890"
export AWS_SECRET_ACCESS_KEY="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
# create a certificate
certbot certonly --noninteractive --agree-tos -m webmaster@example.com \n
--no-eff-email --dns-route53 --rsa-key-size 4096 \n
-d mail.example.com -d smtp.example.com -d imap.example.com
As you can see in the last line of my given example, Let's Encrypt supports multi domain certificates. If your mail server listens to multiple domains, you have to go this way. SMTP or IMAP doesn't support SNI like HTTPS does.
The second step is to forward your mail from your web server to the mail server. As its best practice to have for each service a separate server Linux/Unix will use local mail for many cases. So you should not remove Postfix entirely from your web server. Change the Postfix setup to the so called "satellite" setup. Here your Postfix will forward mails to a relay server and provides SMTP only for local services (socket and/or localhost:25).
If you are using Debian or Ubuntu you can reconfigure Postfix via:
dpkg-reconfigure postfix
In the satellite setup you will be asked for a mail relay server. Enter here the domain name of your new mail server (e.g. mail.example.com).
In your mail server setup you should enable the IP address of your web server as trusted source for mail relaying. A good approach is using the Postfix configuration directive permit_mynetworks.