Beside RAM upgrade (which is allowed), you can always change your CPU, GPU since it uses the same socket found in a regular computer.
But be warned that you lose your warranty/AppleCare, not just for the parts you replaced, but for the whole machine.
Apple won't replace your WiFi card when it fails and they found out your machine has 6970M and i7 2700k in it, while it's not supposed to. They can easily spot your original spec by machine ID number.
I don't understand the whole idea of upgrading iMac guts by their own. I mean, sure it's doable with some patience and difficulties. But why would you do that?
You lose your warranty, you risk the whole machine, and it could end up being a worthless scrap if things going sideways while we know iMac ain't exactly a cheap machine.
Isn't the point of all-in-one desktop is simplicity? You knew the risk from the beginning and you bought it anyway. It makes life easier in exchange of upgradeability? If I were going to upgrade by my own, I would build a PC. Way cheaper and safer to do a DIY installation. It's designed to do that. Or at least going all out with MacPro.
Being that said, it's your machine .. it's up to you how to treat it. But I'd go and sell my machine, then get the iMac with the right spec.
Oh I'm capable enough to tinkering with CPU socket and all. If I'm feeling adventurous. I'd buy a super cheap ancient iMac to tinker.
But as I bought a relatively new iMac (still under AppleCare), I realize that I'm not supposed to tinker it too much. I think that's the point of AIO?