Both the PIT and APIC (as well as HPET) timers are emulated by Xen for an HVM guest. However there have always been rare hard-to-reproduce problems when guests use them. At one time, there were workarounds that required a special parameter “timer_mode” to be selected for HVM guests. If I recall correctly, different timer modes overcame different limitations of different timer emulations (or maybe mismatches between guest “bugs” exposed by virtual time and true hypervisor emulation). These timer_mode workarounds may or may not work with more recent Linux and Windows guests. And there are still periodic bug fixes being applied for timers in the hypervisor emulation code.
At 4.0, full TSC emulation was added in an attempt to provide a high-resolution guaranteed monotonic timer. However, most legacy HVM guests cannot or refuse to use TSC as a timer. (And there may be lurking bugs there as well.)
For most PV guest OS’s, the pvclock algorithm is used so PIT/APIC/HPET emulation should be unnecessary (and, if used, is likely buggy). And actually pvclock should be superceded by using TSC, which is always faster, but for most workloads the performance difference doesn’t matter.
If you are interested in a good (but difficult) Xen project, “virtual time” still needs work and documentation. I would be happy to provide lots of background documentation but can’t volunteer to help much more than that right now.