No the op-amps aren't comparators but error amplifiers. A comparator's output is either on or off, depending on which input voltage is greater. An error amplifier, is put inside the feedback loop of a more complex circuit/system. It compares the required voltage on one of its inputs, with the voltage at the feedback node on its output input and alters its output to try to make the voltages on its inputs equal one another.
Note that the distinction is not very meaningful here, as the circuit is not compensated: it will most likely oscillate, regardless of whether, say, LM358 or LM393 were used.
To add compensation, you need a series input resistance to the -in pin, and an R+C from out (the op-amp output) to -in. The series resistor will probably be 1-10k or so, and the R+C will depend on the behavior of the feedback loop around the op-amp. A typical RC time constant of 100s of us would be a good starting point, and R ~= Rs. Adjust values until the step response is as fast as it can be without ringing (you need an oscilloscope for this).
You have the added trick of CC to CV operation. When one op-amp is closing the loop, the other is saturated to +V. When a threshold is crossed, the op-amp's output must fall all the way from +V to the voltage where the LED pulls on. Op-amps have limited slew rate, so this takes a lot of time: microseconds. During this time, if you've suddenly applied a short circuit, for instance, the transistors are simply delivering whatever voltage they can -- the short-circuit current is unlimited for those precious microseconds!
Microseconds aren't enough to destroy transistors (usually), but if the recovery time constant is milliseconds instead of microseconds, you've got dead silicon on the bench!
It's often better to design a power supply with CC operation in mind first, then to put a second control loop around that, to enforce CV operation. This way, the CC loop reacts instantly, limiting surge current. (To go with that: the transistor would be PNP, common emitter, so its own output has a constant-current characteristic, even before the op-amp responds.) The CC loop is "programmed" with a setpoint; that setpoint has a limited range, so even if the voltage controller (that's generating the "program" signal) goes nuts, it simply can't call for any more than maximum current!
What's best, is this architecture flows seamlessly into SMPS design: tack on a PWM modulator, switch and inductor (so that you are controlling inductor current), and you have the most robust SMPS controller!
Tim