I think you are going over the top with VMs, this is *NIX not Windows so unless you setup something that reads the email and executes it then you shouldn't run in to any difficulties as long as you keep your software versions up to date.
I run exim on my server to receive the mail for some virtual domains, but that's more to do with it being the default in Debian rather than anything for it (apart from it not being sendmail). The configuration options are incredibly scary in their complexity and not well documented, but it is a very powerful setup.
I have a dynamic IP address that DynDNS resolves the domain name for. I set up MX records for each domain pointing to the server name in that domain and the server name then points to the IP address. That should ensure that the email hits your machine.
For outgoing mail, use the "smarthost" option where your SMTP server sends it to your ISPs SMTP server, that gets through outgoing port blocking and other stuff. Setup an SPF record in your DNS for your ISPs SMTP servers otherwise your mail may get tagged as SPAM by some places. Gmail shows SPF record checking if you send email from your setup to your gmail address to double check it.
You will get hit by spammers, I thoroughly recommend SpamAssassin and if running exim you can tie it in through sa-exim to reject at the SMTP stage, so the spam never actually gets fully received by your host. Make sure it is doing DNS RBL lookups though, in Debian it defaulted to not doing them and I had to install an extra package - I think it was a perl DNS package - before it would do the lookups.
Once the SMTP server has received the mail it can deliver it wherever, including in to an IMAP server, although I believe this is usually done by delivering in to mail box files and then running an IMAP server pointing at them, but I might be wrong.
Tips for troubleshooting:
1) Check your logfiles
2) Learn to speak SMTP i.e. telnet name@domain 25 and then type the SMTP commands (see RFC 821 http://www.ietf.org/rfc/rfc0821.txt
) This way you can see what your server is doing when a mailhost tries to talk to it.