From WP7 to WP8 was WinCE kernel and single core to WinNT kernel and multicore. Maybe the WP7 devices could do it, but not with good performance. That one just wasn't going to happen.
Most of the WP8 devices were able to run WM 10, but the experience was really poor on the low memory devices, so those didn't get a release outside of the public insider builds. There was one or two devices that didn't get upgrades for some reason, other than those and the low memory devices upgrading to 10 was available, but it took a long time for them to get around to fixing things; it actually got a lot better in the release after they officially gave up. Possibly if there was a focus on mobile during development of 10, they could have made the first release good, and maybe even got it to work OK on low memory devices; Edge was still going to be trash though.
All of that said, a bigger problem was dumping goodwill of developers. WP7, WP8, and WM10 all had new frameworks for apps that were needed for new functionality and didn't work with prior Microsoft OSes; calling the WM10 one 'Universal' was darkly humorous.