haXe is okay at what it does, it's no good for cross platform high end games. Even flash is being dropped in mobile devices, Adobe have stated they are no longer developing for it.
They have moved into HTML 5 development tools.
Doing true cross platform development is a pain, you have there options
1) Compile time generation
2) Interpreted code
3) Translated code
Compile time generation means that when you hit build all, a version is built for each platform supported, so you have one binary for each platform.
You have to rely on whomsoever creates the system to provide libraries and a compiler for each platform.
Interpreted code is the way Java ( puke ) works. You have a virtual machine for each platform but one binary. Generally virtual machines are limited in that they can only support the minimum spec hardware available. Since they have to run on all of the supported platforms, it's tricky to get the VM to support special case hardware.
Translated code is the one I like, you compile to an intermediate bytecode that is translated into native code when you load the binary. You have a single binary that runs on all supported hardware without recompilation. You get the best mix of portability and speed.
Whichever system you plump for you are still going to end up with run time flags to handle missing hardware ( or maybe compile time flags for the 1st option)
Cross platform coding isn't yet a simple task, unless of course you are only worried about a small subset of devices, but with the number of mobile phones still increasing and the number of games machines pretty constant, well it's up to you how far you want to go.