True.
>why are they still so easily detectable?
This doesn't negate the above. An OS interfaces with the underlying hardware, whether it's virtual or physical, so it always has some idea of what's going on, depending on what the virtualization layer tells the kernel. While it's possible to make a virtualization stack that makes it look like an OS is bare metal, many people don't care and already know that they are virtualized. It's possible to make the Linux kernel sidestep the tests for virtualization in this project, however.
Hosting providers do this with their Virtuozzo products so they can take advantage of memory deduplication. Such information can be helpful in diagnosing performance bottlenecks (think paravirtual steal-time).