It depends on several factors and needs to be broken down into two steps.
1. Transferring the actual files, databases, email accounts, etc.
2. Managing the DNS so that it's a crisp transition.
Step 1 depends greatly on the control panels used.
If both use the same panel, there's usually backup/restore function that allows you to backup the site on one server then restore it to the other.
If there are two different control panels in use, there may exist an import function or a script to convert the backups and restore them on another panel using a different control panel.
Last resort, if there are no conversion scripts available, one will need to do everything manually.
Step 2 is a matter of managing the VPS. Several days or even a week before you plan to transfer the site, the zone's TTL must be set to a very low value. This will allow the TTL to propagate throughout the internet. Once you have the accounts set up on the other server, you edit the original server's DNS zone with the new server information (IP address's etc.) Since you've previously set the TTL to a low value, changes to the zone will propagate faster. In other words, requests for the domain will be forwarded to the domains nameserver versus an ISP's cache. You can minimize your down time to minutes using this method.
Once steps 1 and 2 are complete, you may go to your registrar and update the domains nameservers to that of the new server.
The only problem that exists is that changes made to the files or databases after uploading the backup to the new server will, of course, not exist on the new server. There are a few methods to make sure these files are updated, however the simplest is to shut the original site down for the brief period it takes to upload the changes to the new server. A simple 'our site is currently undergoing maintenance' page on both servers will suffice for that short period.