I hope the next iteration goes well!
You might look at the MCP4728. It is a 12bit DAC with 4 channels out, I2C control, internal Vref with 2X output gain, on board EEPROM to hold power up defaults and I2C addressing, settling time of 6 micro seconds for under $2.50. There is no need for four channels out, only one is currently indicated, but it is always nice to have some expansion as long as the cost is low. Similar devices with only 1 channel are about half the price. And using the DAC instead of analog feedback, you can decrease the op amp count to one for the current sense and one to add a gain of around 3.66 to the DAC output to reach 15V gate drive, so adding the chip for the DAC should be balanced by reducing the op amp packages by one. And with Vset and Iset determined by digital control will free up to analog inputs to the ADC so only one package will be needed there.
The one concern with doing it all in digital is if the micro locks up and the load changes then the output regulation will be off. One approach is to put the output regulation in an independent, fast interrupt routine and also set the watchdog timer to shut everything down if the interrupt fails.
In the interrupt routine, read the ADC for the VFeedback and IFeedback, select which one is in control, write it out to the DAC, then reset the Watchdog timer. Since the Vset and Iset are determined by the software they don’t need to be measured as well. With the Watchdog timer set for 16msec if the micro locks up or something and misses 16 cycles of the interrupt, the watchdog timer trigger and will allow setting the DAC to zero and then shutting down to prevent runaway output.
The ADC converts in about 300 micro seconds and the DAC output settles in 6 micro seconds, so you would need to program one of the timers for around 1msec to leave slack time for the main program to run. You can even implement a PID in software in the interrupt loop to get rapid return to voltage with changing loads and still eliminate any oscillations. The ATMeage does not have much arithmetic capability so if you want to linearize the moset output or do a PID keep the calculations as simple as possible.
Reading the rotary encoders and writing information to the LCD, handling all the menus and sub-menus and pretty much all the other microcontroller operations can be done in the main code looping around indefinitely. Startup would program the DAC to zero as well as setting the EEPROM to output zero at power up, starting the mosfet gate control loop then setting up the watchdog timer. With Vset and Iset deterined by software, you can also change them as needed to prevent over heating. If the user is turning the current limit knob up too high you can lower Vset at the same time to compensate or do the same with Vset changing Iset.
The specs on the FDA38N30 make it look like the linear mode is not especially linear, and one possibility is to measure the current conduction of the FDA38N30 for the full range of gate voltage inputs and then work up on your computer a piece-wise linear correction factor to make the mosfet conductivity a flat, linear function of the digital gate control value generated in each interrupt loop above. However, the feedback process will correct for the non-linearity in the mosfet. The linearity of the power supply will be the combination of the ADC converter for Vfeedbck and IFeedback and the digitally generated Vset and Iset.
With the speed of the ADC allows about 1msec response to changes in the load. Not as quick as the analog circuit but not too slow. With a 1msec response time, a 30A surge would drain the two 47uF caps by about .350V. To get a smoother output under worst case conditions you would need to increase the size of the caps.
If all this sounds like too much, you can always stick with what you have now. It is mostly just a matter of personal preference and how much you need the extra features.