Hi Muneeb
Let me chip in on this (at your request). :-)
From your comments I believe you're on the right tract, and can carry on with your plans. But I'd like just to reiterate some of your thoughts, with my own words, and hopefully this will reassure you.
You're right you will have to repeat the steps for code upgrade for each layer (like Martin also points out).
So after the SYS with R3 code is in place, and you have VAR, CUS and USR unprepared, you will have a starting point for the code upgrade phase. Backup this modelstore in case you need to start over. Let's call this the "unfinished modelstore".
Next you "uninstall" CUS and USR, and then "install" the "VAR model" from your vendor. Then compile, sync and verify your R3 is in good shape in regards to code. You may already have done this, but I'd make sure to do it at least once to verify your vendor has not made any blunders, like having a dependency pointing further up in CUS/USR - yaikes!
When you're ready to do CUS, you'll restore back the "unfinished modelstore" and install VAR Model.
PS! you only need to use the "replace" if you're replacing a model where the name or publisher has changed. This shouldn't be true for the "VAR Model", or any of the other default models. Overwrite is only necessary if an element for some reason already exists in a different model *in the same layer*. Since you're only using one model for each layer, this should not be the case.
Further you "uninstall" USR and go ahead with upgrading CUS only. Export the upgraded CUS model after it is ready.
Restore "unfinished modelstore". Install "VAR Model" and "CUS Model" which now are R3 worthy, and since you're at the top layer, there is no need to uninstall anything. Fix the USR Model so it also becomes R3 worthy, and you're done!
Regarding IDs, to fully understand what creates new IDs, and what keeps them as they should be, I shall shamelessly plug my own post about it here:
http://yetanotherdynamicsaxblog.blogspot.no/2013/11/about-your-elements-origin-id-and-handle.html
The whole reason you upgrade layer by layer, is because when you sit inside the clients development workspace and do the code upgrade, there is a chance some of your changes may end up in the wrong layer, a layer further up. Example, you code upgrade CUS and one of the changes you try to fix is touched in USR. If USR them still is installed, then you run the risk of putting your fix in USR *even if you're doing the change in a CUS-client*. Yes, it's true. You can try with an element where the method exists changed in both CUS and USR, then try change the method while developing in CUS - your change is saved in USR! And this is why we delete the top-most layers and upgrade one layer at the time. Now, when models are deleted, it can happen that IDs used within that model are lost, so this is why you repeat a modelstore restore for each layer you're code upgrading. Restoring the modelstore sets the IDs back as they were, and when you "install" upgraded VAR and CUS models, you keep the IDs inside the modelstore. Sweeet! :-)
I've also written about the R2 to R3 upgrade story here: http://yetanotherdynamicsaxblog.blogspot.no/2014/04/upgrading-ax2012-r2-to-ax2012-r3.html
Regarding Q5, about customizations in LIVE. The guide states you need to freeze any code changes in LIVE when you start this upgrade process. I strongly agree. Adding new customizations to the mix while doing an upgrade is recipe for headache and potentially disasters, like data loss. Unless I misunderstodd Q5.
Hope that helps a bit. Sorry for the wall of text.