In 2D engines, texts can be rendered relatively easy to screen using conventional bitmap and vector / shape technology that is available in most 2D (middleware) engines.
In 3D, everything must be on a texture that is applied to a triangle in 3D space. For this, you are heavily dependent on what your engine supports or how much time you want to spend on it yourself. How annoying!
That's why, for simple 3D games, often programmers create buttons and text-elements as they go along using anything they can find. Sometimes an artists takes a quick look to adjust some colors and sizes and that's it.
For more complex 3D games, there's a whole team just for the interface. It is properly designed, and then it's up to the programmer to try to approximate it as best they can in code. Nowadays, some developers even create their interface in Flash and then render it onto their 3D games using middleware like Scaleform, allowing text effects and development flexibility that was never possible before.
Unfortunately, that's something we're not able to use in our 3D dev pipeline. We're very limited in the amount of different styles we can use, just because it would become a nightmare to manage. We also have to take 3D texture filtering into account (making some texts too blurry or too pixelated when scaled). On top of that, we need to consider that some of our games need localization. That's an ugly word in both 2D and 3D development. You never know how much space 'Thank you for playing' will take up in Chinese! Or, if the font that looks good for your game even supports Chinese characters! Doh!