Take the contact resistances for switches and relays given on data sheets, with a large pinch of salt. In reality, they'll be much better than the data sheet specifies. For example, take a switch rated to 10A, which will no doubt have a contact resistance of 100mOhm or something stupid listed on the data sheet. That would indicate a power dissipation of 10W, at full current, but in reality it will be nowhere near that, otherwise the contacts would melt!
Switch contact resistances are often measured under the worst case scenario such as a low current and immediately after the contacts have closed. Try conducting a few tests with some switches and relays you have, with a current of 1A and you'll see what I mean. You'll have to get a very good MOSFET to replace a switch. No doubt it's possible these days, but it might not be as easy as you think.
How accurate is your digital potentiometer? Probably worse than 0.1%. Scrap it and replace it with a proper DAC.
The only way you're going to get the desired level of precision and accuracy is by calibrating it and storing the scaling factors in the micro-controller's memory.
Use a reference with a slightly higher voltage than 1V, say 1.024V and a precision 1R sense resistor, which is kept in the circuit at all times. Suppose you have a 9.1R resistor in series with the 1R, to give a range of just over 100mA. Put the MOSFET in parallel with the 9.1R resistor. The MOSFET only needs to have a worst case on resistance of 24mOhm. Switch the MOSFET on for the 1A range and set the DAC output to 1V. Measure the current through the 1R resistor, with a calibrated multimeter. Note the value, which will be used to scale the current setting. For example suppose you read 0.99A, you get your software to multiply all current settings on the 1A range by 1/0.99 = 1.01 and it will give you the correct result. The MOSFET's on resistance will change depending on the temperature, but not enough to upset the calibration.