For cyrus, you can have multiple 'imap' or 'imaps' entries in /etc/cyrus.conf, each with a different config file. So you could have (for example):
Code:
SERVICES {
imaps cmd="imapd -s -C /etc/imapd-eth0.conf" listen="imap2" prefork=0
imaps cmd="imapd -s -C /etc/imapd-eth1.conf" listen="144" prefork=0
This would mean that two (or more) imapd processes would start, one on the default imap2 port (143), and one on port 144, using different config files (and therefore different certificates etc). A bit of port redirection using iptables and you can have imap connections from eth1 redirected to the second imapd process. You'd have to be careful that each imapd.conf file FULLY specified separate directories for spool, lib etc (using defaults would cause problems I imagine as they might overwrite each other's databases etc), but on the face of it this should do what you want.
I haven't tested this thoroughly but it seems to work (at least two imapd daemons start and you can connect to both and have different mailstores presented).
Sorry, can't help with sendmail as I use exim, but I'd have thought you could do something similar. Afterall, all you're really doing above is starting two daemons and using port redirection to make them transparent.
Good luck.