This is techicallytechnically possible, but tricky.
First you'd have to wire up the Arduino with some jumpers in such a way that the 328P can use its ICSP header to reprogram the 16U2/8U2 via that chips own header. With the right custom firmware in place you could then re-wire the board so that the 16U2 changes the fuses of the 328P upon boot and reuploads the firmware before switching into its usual function. Then it's just a matter of having the 328P reprogram the 16U2 with the original DFU firmware, and presto! An Arduino that changed its own fuses!
Could beIf you just need to change the fuses without a fun little weekend project, actually! ;DICSP programmer then that can be done by just programming the 16U2 chip directly through its USB port (although technically that doesn't qualify as the Uno "programming itself").