Does Android x86 emulate ARM?
intel has released a library ('libhoudini') which translates arm instructions to x86. Then they get executed on x86 CPU.
First thing first, Android apps (pure Java) are not actually being "compiled for ARM, just like Java apps are compiled into a intermediate Java bytecodes to to executed by any platforms that supports JVM, Android apps written in Java are compiled into Dalvik bytecodes to be run on any platform that supports Dalvik VM. In this regard, how Android apps run x86 or ARM or MIPS is similar to how Java apps run on x86, SPARC, POWER, etc.
Of course if an app contains native code, then the app would need to include support for x86 to be run on an x86 emulator or an actual x86 phone/tablet.
As for the second part of your question, remember that the OS part of Android has been compiled to the x86 platform, so I would assume running x86 Android on a x86 computer is exactly same as running, for example, a Windows in a VM when using OSX.
An Android x86 fork "AndroVM" (Official site no longer exist, someone has mirrored the files here) did ARM emulation when an application contains ARM native codes.
As far as I know, the official versions of Android x86 doesn't do ARM emulation; the apps using native ARM codes crash immediately.
Genymotion (AndroVM sequel) doesn't emulate ARM by default. There is an unofficial hack that adds ARM emulation, though.