Theoretically, you can do a lot of this stuff. With a bit of trickery, people have gotten Debian and other forms of Linux to run on Android phones; here's one of a million videos demonstrating this.
You seem to be talking especially about running different operating system on mobile devices. Theoretically, any mobile device should basically be able to run any other mobile operating system. They all use ARM processors and otherwise the same basic hardware; sure, some drivers would have to be written to make specific specialized components work, but that's a relatively small hurdle.
The bigger hurdle is that phone manufacturers don't want you to do this. With the exception perhaps of Google's Nexus devices, pretty much every mobile device/tablet/etc has a locked bootloader. This means that the manufacturer's have put measures in place to prevent a different OS from being installed and to prevent the OS from being significantly modified.
Sometimes, hackers can get around these measures (this is called "rooting" or "jailbreaking", depending on how it's done), but it's never a particularly easy thing to pull off. I doubt we'll ever see any hackers put anything besides iOS on an iPhone/iPad, because, if I'm not mistaken, Apple uses a custom CPU and lots of other custom parts in their devices, and there is pretty much no public documentation for these. You'll also probably never see Windows (desktop Windows anyway) on a mobile device because Windows is built for x86 processors, and mobile devices pretty much exclusively have ARM processors (that said, Windows RT, Windows 8's crappier cousin, runs on ARM).
TLDR: Basically, the biggest limitation is that manufacturers don't want you to repurpose their hardware. They put preventative measures in place towards this end, and often use undocumented hardware and components that are very difficult to reverse engineer.