The answer for questions 1 and 2 is that some apps on Android are compiled purely in Java/Dalvik bytecode, and others are compiled as native C/C++. Since Dalvik bytecode is not native, it has separate interpreters for different architectures. However, since C/C++ native apps and libraries are compiled for a specific architecture, they can be run only on the specific architecture.
Since most of the rooting apps use exploits of the Android system, they need to be compiled in C. This prevents them from being universally used, and require them to be recompiled for each architecture.