With cheap(er) radios, you have to do a lot of work to ensure that the data received is correct and useable, and to deal with getting the sender to resend any garbled messages.
Not so. With the much less expensive nRf24L01+ radio modules, you get automatic integrity verification of each packet sent via a check sum. And in auto-acknowledge (AA) mode, they also automatically manage resend attempts, with up to 15 retries (user configurable) before giving up and reporting a transmission failure. So: no garbled messages, and no dealing with resends. All handled at the hardware level.
Overall, for price/performance/ease of use I feel the nRf24L01+ radio modules are far ahead of the Xbees.
Price. These modules are extremely well-priced compared to the Xbees (or any competing technology, for that matter) for any given effective transmission range. Just about unbeatable raw digital radio bang-for-buck.
Scalability. Modules range from the uber cheap low power "PCB-trace antenna" style devices with a range of (say) 10-20m, depending on what's in the way, to the high power external antenna modules capable of ranges of 100s of metres. So you only pay for the range you need for any application. And even the high power modules are relatively inexpensive.
Software flexibility. You can go for relatively simple libs such as Mirf and maniacbug's RF24 libraries that support packet based messaging of up to 32 bytes per packet, or more sophisticated libs such as my RFXduino library which provides support for TCP/IP streaming over the nRF24L101+ modules via a Linux gateway. So you can use these same radios as building blocks to assemble a peer-to-peer sensor networks, or to replace WiFi shields for wireless Internet connectivity!
So why might people choose the Xbee as a wireless connectivity solution for Arduinos? Three reasons I can think of:
They want a point-to-point serial style connection rather than a a packet-based connection "out of the box". Xbees are (like almost all data radios) really packet devices, but they assemble and manage packets into a virtual stream "behind the curtain", just as RFXduino does for the nRF24L01+ radio modules. But with the nRf24L01+ modules, you need an extra layer of software to "serialize" the connections. As Paul suggests, it's pretty quick to get a basic point-to-point serial connection up and running with the Xbees.
There is a lot of shield hardware support to make it easy to drop in a module and go, without having to fuss with soldering up point-to-point wiring solutions on proto board or similar for the nRF24L01+ modules, which can be tedious. (I have tried to redress the imbalance somewhat by developing, and now selling, nRf24L01+ shields as kits.)
The Xbees have been out for a while now, and they are now established in people's minds and experience as a wireless connectivity solution for Arduinos. But being first doesn't mean they are a better solution. In my case, my experience with them only convinced me early on that there had to be better and much more cost-effective ways of doing this.
So there you go. If you are looking for powerful, easy to use, and good bang for buck, I can't think of anything better, on balance, than the nRF24L01+ modules. Also worth mentioning are the humble 433MHz modules (which incidently do have the limitations PaulS refers to above), and at the other extreme, the uber expensive WiFI shields (which have the dubious distinction of possibly being even worse bang-for-buck than the Xbees, at least IMHO.) Bluetooth is also worth considering for a point-to-point serial connection; while traditionally only usable over very limited ranges, the newer longer range Bluetooth devices offer some interesting mid-range deployment possibilities.