You use 3 different atlases.
SD - for ipods, low res iphones
HD - for iphone retina, ipad
UD (ultra def) - for ipad retina.
in the atlas prefab, you set the pixel size to respectively 1, .5f, .25f.
You use a 4th reference atlas which initially references the SD atlas and set everything up in the 480*320 size (or 320*480 if you're landscape).
Now there's two ways of going at actually building your UI. The best way is like Aron mentioned above - set anchors and attach widgets to the anchors so things just change place depending on aspect, or Make everything be attach to top or bottom and set it from that anchor - this means that something that fills the entire screen on the iphone will have borders on the ipad - if you have a game element or just a background in the background, then this can work as well.
In my UI, I've made a script that changed the reference atlas to any of the other atlases based on the device resolution, but if it's an iPad I don't want it to loose the pixel perfectness, so on the UIRoot object I have a script attached that changes the UI root settings.
Everything is setup like it's 480px high (portrait) but on the ipad, this makes my UI fill the full height and stretch. Since my pixel size on the HD atlas is 0.5, I only need the root to think that the height is half of what it is, so I set the manual height to 512 and then it's pixel perfect.
myUIRoot = gameObject.GetComponent<UIRoot>();
if (DeviceInfo.formFactor == DeviceInfo.FormFactor.iPad)
{
//sets size to 512x384 for full screen (existing high res assets stay pixel perfect ( a little smaller on screen)).
int newHeight = Mathf.RoundToInt(myUIRoot.manualHeight * 16 / 15); //will work for retina ipad too
myUIRoot.manualHeight = newHeight;
}