Separate servers (either physical or virtual) for different functions is an EXCELLENT idea.
If a server dies or has issues, it only affects that one service. If they are all on the same server, something that crashes the server takes out everything.
It also means you can schedule updates more easily, since doing the updates only affects one service at a time. And when you decide to upgrade the OS one day, you don't have to worry about it breaking several different services. You may even run into a situation where a website needs an old version of PHP or MySQL to run properly, but your email services need a newer version. Separate servers has you covered there.
It also makes restoring from backups much easier. If email and websites are on one server, you have to worry about restoring the data for both at the same time. And possibly losing some of the newest email and website changes that haven't been backed up yet. If they are separate, you only have to worry about one of those being rolled back. Especially useful if it's the webserver you are restoring - reapplying a few website changes isn't too bad. Having to delete the last 23 hours of emails because the website broke is.
The downside is you now have more servers to manage, and to pay for. But in most cases eliminating the risk of an issue taking out EVERYTHING is worth it.