Who said RS232? I simply said serial... the cheaply available PL2303 chip would work great and you can get it EVERYWHERE, you can get a cable for like $2 shipped on the internet, and you just splice the wires... it gives a safe 3.3v and can handle anywhere from ~2.4 volts to 5.5 volts IIRC. I2C or SPI would rob way too many clock cycles and is too hard to bitbang. Honestly, serial is RIGHT there and it takes like 3 or 4 lines of code to set up. It would also not change the production costs...
I have done both serial, I2C and SPI in software and I think serial is the worst, another problem is a micro running on a uncalibrated RC oscillator, you need to add code to automatic calibrate the baud rate.
The cpu load does not really matter, the interface and the flashlight does not need to be active simultaneous. Putting this chip in a cable and doing it as I described above would also be nearly cost neutral.
1) Expense.
Let's use your example of a USB computer interface. First, you need a bunch of extra hardware in the flashlight that most likely will rarely be used. Then you need a very flexible system for controlling the interface, which must take into account the interface hardware and all of the different ways you can interact with that interface. Then you need software on the PC that knows about all of the possible options. There will be a large expense in developing both. The development cost must be amortized over some number of flashlights and added to the cost of those flashlights.
Let's pretend it will take an engineer one year to develop and test everything - which is probably optimistic. Let's assume you pay that engineer $60,000 fully burdened - which may also be optimistic. If you plan on selling 1000 flashlights, the development costs will add $60 to each flashlight. You can use other assumptions to get other values.
Doing a full usb interface in a microprocessor might take some time, but doing it as I described above would not add any significant hardware cost. The development would take some time, but when looking back n the projects I have done with small microprocessors and PC configuration tools, it does not come anywhere near a year.
2) Complexity.
Infinite configurability is infinite complexity. Have you ever defined a UI? Do you really expect your customer to design a UI? Even if you gave your customer 20 template UIs, it would be an uphill task to pick one and then get it configured.
When I laid out the UI for the HDS Systems clicky-style flashlights, it took a long time to work my way through all of the various possibilities and arrive at what we have today. Our UI supports 4 presets, each of which can be any of the 23 levels or 3 signals. Plus there are 6 global options. And that is just 1 possible UI design based on a single button. There are lots more possible UIs based on a single button and you will find many of them on different models of flashlights.
A programmable does not need a multitude of different UI templates, look at something like the JetBeam IBS, it has different brightness settings and a collection of flashing settings. For a programmable flashlight add a variable number (1-9) of slots that can be programmed with something like that or for a ring light add a slot for each position on the ring.
Then add a few extra options (Like low battery shutoff, memory/no memory) and it would be a nice user programmable light.
No more complains about high or low first, memory or no memory, spread between brightness setting etc., flashing modes or not, all can be adjusted easily from a PC.