USB has quite a bit of margin built in to account for imperfect connectors, circuit board routing, cables, etc. Best case scenario, the layout and routing in your design will be implemented as closely as possible to the standard to ensure that the portion of the margin your implementation eats up is small.
In the case of the Dangerous Prototypes PCB, the 2-layer based routing may not be ideal, however with the provided USB cable, there's likely still enough margin left. It is possible, however, that if you increased the length of the cable, or added more hubs into the mix, the link may not be as reliable. This is OK for a development board, however, for a product requiring a high level of robustness, sticking closer to an implementation that can achieve the USB spec would justify an increased cost.
The USB standard specifies differential impedance between the data pair (D+ and D-), as well as the impedance of D+ and D- to GND. Differential impedance is dependent on trace width and spacing between the pair. Proper impedance to GND would be most achievable with a reference ground plane on the layer directly adjacent the surface layer D+ and D- are routed on, which would make a 4+ layer board a better option. Note that the insulating layer thicknesses and dielectric properties between the routing layers also play a role, so simply moving to any 4-layer board wouldn't necessarily get you within spec.
Ultimately if you are a hobbyist looking to make a device that would normally operate in a more controlled environment, Chris Stratton's response is very reasonable:
- Include some series R on the D+ / D- traces (initially populated with jumpers) that can be experimented with in case of communication issues.
- Locate the IC and connector close to keep the D+ / D- pair's routing short.
- Match the length of the D+ / D- traces as closely as possible.
- Route other traces as far away from the pair as possible.
There's also a similar question asked here: 2-layer USB 2.0 High-Speed routing