I'm wondering why Android apps won't be able to be run natively on Ubuntu Touch. I mean, isn't it all just Linux?
The short answer is "no."
Strictly speaking, the Linux kernel provides little more than a direct interface to the hardware it is running on. There is an entire stack of additional Android-phone-specific APIs, programs, applications, etc. on which Android applications depend. Additionally, Android does not run on a generic Linux kernel, but instead runs on one that has been highly customized by Google with the specific purpose of running their OS.
Even if it is technically possible to reproduce the entire stack required for Android applications to run on another system, it would be bloated and extremely inefficient.
Nokia n900 runs maemo witch is a linux os and yet it can run android's app via the dalvik environement wich was develloped for it but never put on market or repisitories. Why? Only the society who developped the dalvik for n900 knows. Now there was another initiative call apkenv. Seems there's was not so much thing's to add to make the n900 running some android games and no matter about the gpu or cpu power or maemo's desktop the apps run there some lake like in any emulation but some runs perfectly some not. So about ubuntu touch it is not question of technic (may be i am wrong but one official ubuntu's touch phone is a xiaomi wich is used for android too so hardware is nor a problem in this case) but will and law thout that google won't be happy that ubuntu runs android app and use the google play as second repository (note that is is possible to download the .apk as .deb and install after).
The answer to your question is a BIG NO.
The similarity in kernel between different OS doesn't make their applications executable on these different OS. Kernel is the lowest software layer of a system. Above kernel lies user space which consists of system software and application interface.
OS with the same kernel may have entirely different user spaces and native applications execute in a particular user space.
Moreover, Android apps are developed usually using java and android apps execute in a runtime environment (Dalvik or ART) which takes bytecode from JVM as an input , whereas linux applications are directly converted into machine code upon compilation.
Applications developed for android using C++ cannot be executed in linux environment directly rather they have to be compiled first for linux systems.