Check libhoudini, and maybe @exophase could say something about this.
You read my mind..
I doubt you'll find an x86 Android device that doesn't have libhoudini installed. It's closed source and I don't think it's part of Android proper (OEMs would instead normally get it from Intel, I presume) but there isn't anything that needs to be done to get it working on a particular device. It's possible to have an unofficial x86 Android platform where you just copy the libraries to get it working. For instance see here:
http://pilcrowpipe.blogspot.com/2014/03/running-arm-apps-on-android-x86.html
But libhoudini is a compromise. Last I heard, it was compatible with about 90% of Android apps that require ARM code. I don't know if this has been improved or not. The bigger problem is that, as is often the case with binary translation, there's a big overhead. From Intel's own papers, the average performance with SPECInt2k (I think is what they used) is well under 50% native (what you'd get with binaries compiled for x86). On real world programs the result may be worse because they have bigger icache footprints than SPECInt2k and translation exasperates icache pressure because it makes all of the code bigger.
On my program, DraStic, the performance hit from libhoudini is huge. The x86 native version is 2 to 2.4 times faster than the ARM version. I made a post about this here:
http://forums.anandtech.com/showpost.php?p=36368616&postcount=112
The thing to understand here is that the ARM native vs x86 native comparison isn't apples to apples to begin with, because the ARM native is much better optimized (has a higher quality recompiler and has a bunch of hand-written NEON assembly, while the x86 version relies on the compiler's auto-vectorization). If the x86 version was as optimized as the ARM version the difference would be more like 4x. So when dealing with highly optimized ARM code libhoudini doesn't generate good x86 code at all.
A lot of this could be down to it choking on NEON instructions. But for high performance apps this is a big deal.
Bottom line: if you're an app developer of anything that's even modestly CPU heavy you're really screwing over your (regularly growing) x86 customer base by not including a native build. Even a simple and rushed native build is probably going to be much better than relying on libhoudini.
I would say that at the very least, libhoudini puts perf and perf/W back a few years for Intel. So it's bizarre that their public commentary on it is that it's basically no problem, when they've put so much focus on how much of a perf and perf/W advantage their SoC has over their competitors. I think really this is just assuring would-be customers, while behind the scenes they routinely scramble to get popular app developers to properly support x86.