The by far best and simple variant is to download Buildroid 4.0.4 RC1.1 version 2012-06-10 with Google Apps and Houdini. It's a virtual appliance to be imported right into VirtualBox. The announcement for this can be found in BuilDroid: Running ARM apps, and there are some third-party installation instructions. As a special feature, this variant also includes the ARM-code to x86 translation via the houdini libraries, making it possible to run native / NDK apps on x86 even though they contain binary ARM code without the x86 equivalent. It might be that the graphics of this houdini variant are slower than without houdini; if you need the speed, try the variant without houdini (see its announcement).
It is also possible (in principle) to use a stock Android-x86 ISO image (I tried the 4.0.4 RC2 variant for eeePC) and install from that to a virtual hard disk in VirtualBox (somewhat outdated instructions, more of these but with good tips). However one has to fix several issues manually then which are already done in the VirtualBox-optimized BuilDroid build: getting the Internet connection to work (basically ifconfig, route, setprop commands on Android's console; see here in section Networking), plus getting the Wifi connection to work because else, logging in to Google Play is impossible (fixed in BuilDroid using a second, virtual network device).
Buildroid with houdini indeed can execute the NDK ARM apps (for example, Angrybirds, Facebook, Adobe Reader), for which the Google Play Market showed "your device isn't compatibel with this version" in other versions of Buildroid. However, some apps still show this message in Google Play Market, for a reason unknown to me so far. Among them, WhatsApp (version 2.8.1504) and MiTalk Messenger (version 3.1.435). It is possible to download their apk packages from somewhere with the browser and install them in Buildroid 4.0.4 RC1.1 houdini anyway (after allowing installation form non-market sources in the settings), but for example the MiTalk application apk will not work past the login screen. I suppose this is beause the BuilDroid image used here is built for tablets without phone capabilities (like sending an SMS, which MiTalk might want to do for verification). For other versions, there were also Buildroid images for phones and tabletphones, so another test could be made once such a thing with houdini becomes available.
- The VirtualBox mouse pointer integration does not work – your mouse will not work at all when it's enabled. So disable it in the VirtualBox appliance window with "Machine -> Disable mouse pointer integration".
- It can happen that the mouse does not work to unlock the lock screen. In that case, press the "Windows context menu" key on your keyboard first. This should make the lock symbol emit some waves, showing it registered a keyboard event. And then the mouse is usable again.
- When using the stock Android-x86 ISO images, I found that the mouse initially did not work on the start screen. Saving the VM state and starting the VM again at its saved state solved that issue, as per some tip from the Net.
- Using the console in Buildroid is not as simple as in Android-x86 yet (where it's just pressing Alt-F1). There are instructions, but I did not try them.
- When some Android app changes the screen resolution in VirtualBox (like MiTalk does), it's simplest to restart the virtual machine. The change is not permanent.