The only efficient way to do this is by Pulse Width Modulation (PWM) - where the speed is controlled by duty cycle of the supply voltage.
It's efficient because the current is either on or off. you just vary the time on compared to time off to control the motor's output.
Take all the hard work out of it by using off-the-shelf control gear for model cars.
But you will be dealing with currents in the range of maybe 50 to 300A, depending on the size of starter motor and the mechanical loading on it.
Therefore you would need to build a suitable output booster stage to tag onto the model control gear.
It won't be cheap. Depending on what you're looking to drive, and the PWM frequency you need to use, have a look at Infineon ProFets.
I've used one to drive two high powered car radiator fans at variable speed - PWM'ing 30 Amps, the device got barely warm even withoiut a heatsink.
But I built my own PWM circuit (cribbed from a PC fan speed controller!) but I needed to run a low PWM frequency (about 100Hz) to minimise losses in the ProFet.
Because of the current involved, you may need to run a few devices in parallel.
Simon.