Variation of the 5v should not be a problem if you supply the voltage from the Arduino board, since the analog reference is the same source.
In my experience, if the resistors come from the same lot, even low tolerance resistors are fairly consistent in value, unless you are using ancient carbon composition (does anyone still make those?).
The only limit on number of switch contacts would be the ability to reliably discern the difference in voltage between contacts.
Check your math, I get a slightly lower voltage per step. Need to think about it a while, but with integer math I think you could add 1/2 of a step to the analog reading then divide by the step value to get the contact number, instead of comparing values.