There are several differences.
First you speak of functionality and experience. The latter is really hard to see if you don't want performance to play a part, so I'm going to file that as "subjective". But the former has some points.
Overall you can do a lot, but the biggest issue you have is that you are not running a real machine per definition, and so the hardware support can be limited, or at least different. This might have the effect that your videocard isn't support to it's fullest. The effect of that might be big (no support for 3d for instance) or a bit less (more experience/performace).
The same thing goes for connections like USB. You connect your phone to your host computer. It's not a given you will be able to connect to it for development for instance on your guest (the VM). It could be, there are ways do pass on USB information, and for common things like controllers this will be easy. But the more obscure your hardware or goal, the harder it will be to make the VM react as if the hardware was connected directly.
So there is no global problem in functionality, but there can be many specific ones.
And don't forget performance, this can be real killer, but doesn't have to be.