CPUs and GPUs operate on a frequency/voltage graph/lookup table.
- Undervolting offsets that curve (ie, 5GHz=1.2V is now 5GHz=1.1V) and therefore improves efficiency at EVERY* frequency. Undervolting alone does not decrease performance (if done correctly), in fact, it may even INCREASE performance by allowing the additional power headroom to afford higher frequencies.
- Power limiting (depending on how much) can range in performance loss depending on how consistent the workload is and/or how many cores are being loaded. The other main point being that, these days, most CPUs/GPUs are pushed beyond their "optimal" efficiency range by Intel/AMD/Nvidia at stock operation. By limiting power, you cut off that "inefficient" band of frequencies. Generally (at least initially) you get more power savings than performance loss (ie 10% power reduction =< 10% performance loss)
- This stuff was all pretty well demonstrated by the recent wave of AMD non-X 7000 series CPU launch reviews since those chips are all just power-limited versions of their "X" counterparts.
As far as which one you should do....just know that power limits do limit [potential] performance to some degree as explained above. The nice thing (as you mentioned) is that you don't need to stability test anything because you're not altering the frequency/voltage table.
I have my 5600G undervolted. It draws so little power at 100% power limit, it doesn't matter
I have my 3060Ti undervolted AND power limited (80% so 180W instead of 220W). This is (primarily) to keep it silent while gaming. I still get more than enough FPS for my needs.
* assuming you're applying a global voltage offset, which would adjust every frequency/voltage point by that same amount.