Man that's one jank of a controller...
Current mode control is what you need. This is a bit awkward for a non-integrated buck, but easy if you can split grounds (so the shunt resistor can be on the low side), or add a current sensor (typically a Hall effect sensor IC).
The reason:
What blows up the transistor?
Current.
Sense current, and you prevent it from blowing up.
(Well, sometimes. Current is but one combustion mechanism; overvoltage and sheer power dissipation are the others. With efficient switching, you should minimize the latter, and with a tight switching loop, you minimize the former.)
Current-mode control not just senses current, but actively sets that current to a desired value. Current can never be any higher or lower than requested, as long as the inverter is capable of reaching that current.
A pretty attractive feature when just starting out, right?
You say you don't want current, you want voltage at the output? That's fine -- add a second control loop to regulate that.
Thus you have an inner control loop, regulating inductor current to a setpoint; which is in turn set by an external voltage error amp, regulating capacitor voltage.
Indeed, this scheme separates the L and C responses, so that the control loop can be faster overall. The problem with the voltage mode loop (what's shown above) is, the modulator produces PWM, which is filtered by the LC, which adds considerable phase shift (up to 180°) to the feedback signal. Phase shift which is too much for stable control, and that's why there's the R+C "speedup" (lead-lag) network on the feedback divider: this attempts to cut the phase shift a bit, but can only do so much because resistors are not anti-inductors. Typically the filter capacitor needs ESR as well, for the same reason.
Whereas with separate loops, the inverter and inductor can be controlled as a single-order loop (90° phase shift), which can be tuned for ideal step response; and the outer loop can be tuned as if the inner loop into the capacitor, is a single-order loop again, at say 1/3 or so the cutoff frequency. And typically this is a higher cutoff frequency than 1 / (2 pi sqrt(L C)) (the voltage-mode limit, more or less).
More abstractly: in a voltage-mode control, the inductor current is unconstrained. If you set some fixed PWM% into it, the inductor current will just keep rising or falling forever -- or at least until the output voltage eventually catches up to it. How far does it go in that time? You don't know. This means big transient currents during startup, transient (step) load, or fault (short circuit), and, at best you need to add hacks to prevent destruction -- like clamping max PWM% at something, sensing current anyway but just stopping pulsing or something when it crosses a limit, etc. You make the loop more complicated, less linear, harder to understand. Whereas, if you control inductor current as a primary function, not only do you avoid transistor destruction, but you get the faster loop; and as a bonus, you can get adjustable current limiting practically for free (just add a clamp circuit to the voltage error amp's output).
And the inner loop doesn't need to be particularly well controlled -- you'd use a full error amp for an average current mode control (typical for large value inductors, giving low current ripple), but any other method will do, given its respective limitations. A peak current mode controller (typical example: UC3843) uses an oscillator, comparator and flip-flop to set the peak current at turn-off; this works best at high current ripple (i.e. the switch is off long enough for inductor current to return to zero every cycle). A hysteretic mode controller uses a comparator and nothing else, but the switching frequency isn't well constrained (it simply ping-pongs around as needed to keep current between the comparator's thresholds, and sometimes that requires pulse widths too short to handle by the switch, or the drop in frequency at the extreme ends of operation is undesirable for filtering purposes).
UC3843 is an excellent choice, though a bit of a force-fit for a buck application. It's intended for boost/flyback applications: it has a low-side current sense input, and an error amp with 2.5V reference. To adapt to a buck, you need a bootstrap or isolated gate driver, and some kind of current sensor (again, if a low-side shunt is acceptable, that's actually rather easy; if high side only, then an isolated sensor like a Hall effect will do).
This is a lot to take in, and I would suggest familiarizing yourself with the fundamentals first:
The inductor equation: V = L dI/dt
This says, for a square wave applied voltage (such as switching one end to +V/GND, while the other moves little enough to be ignored), an inductor's current moves as a triangle wave, the slope (dI/dt) being proportional to the voltage difference. In steady state, the difference over a cycle (dI(on) + dI(off)) sums to zero, and this derives the flux balance condition for example.
Likewise for capacitors, I = C dV/dt, but at this point, you can use frequency response arguments -- or just hand-tune the control loop, starting with a cautiously over-compensated error amp and tweaking it down until the step response is as fast as it can be without undue overshoot.
Design based on ranges. Use only as much voltage or current as you need (including suitable margin, to account for variation). For example, the voltage error amp produces a setpoint; the op-amp can only produce voltages between its supply pins (or a few volts less, depending on type), so it's quite reasonable to let those extents be the min/max design current for the current loop. Adjust input/feedback voltages accordingly (with resistor dividers).
Needless to say, you need some kind of oscilloscope; these are transient phenomena and you'll be hopelessly lost without some way to slow down and view those transients. Even a one of those scope devboard thingys will work, but preferably 100MHz or more bandwidth should be available, with proper probes, scales, measurements, etc.
Once you have the control loop well understood, you can translate it into digital form. This is... well, it probably seems nontrivial at this point, but it's actually not too bad, given enough CPU power. And preferably a few convenient peripherals (preferably a timer/counter paired with an analog comparator, such that the comparator can stop the timer output without software intervention). For every analog system of given bandwidth BW, there exists an equivalent sampled digital (discrete time) version, with sample rate Fs > 2*BW. You basically write out the differential equations (the dI/dt's and such) as difference equations (ΔI/Δt), set Δt = Ts = 1/Fs, and Δx = x[n] - x[n-1] (i.e. the difference between current and previous sample). For every resistor or amplifier, there is a corresponding multiplication or addition; for every inductor or capacitor, there is a corresponding state register. The circuit converts into a sequence of operations to perform on those registers, and, that's DSP.
If you don't know calculus, this will all be a bit of a blur -- and you'll need calculus to fully understand and work within it -- but at least in my opinion, once you've seen how DSP is actually done, it's rather intuitive, and approachable from a computer science perspective if that might be your background. I might even argue it's easier to go that way, from CS through DSP to analog systems, but that's perhaps a conversation for another thread.
And, if you need a simpler solution, sooner -- set this aside, use a pre-cooked method. Use a... well, probably not an integrated regulator at this power level, but there are many controllers available in this range. Follow the datasheet and appnotes, or even just use an eval board. Or even buy a ready-made module; it'll be noisy as hell, probably hot too (the cheap ones anyway), but it'll probably work. (For point of reference, I've a client with a very similar application; if you're interested, I can ask if they'd be willing to send/sell some power supply boards your way.)
Keep in mind, by the way, anything you do here, is precisely equivalent to a cute little say 5V 500mA USB input converter -- something which comes with much smaller risk of blowing transistors, or the cost thereof. If you can motivate on the concepts rather than the goal, or tolerate adding a stepping stone towards that goal -- I strongly recommend making a scale model to work up to it!
Good luck,
Tim