There's a few key reasons I'll go over. For reference I'm referring to "training" here as any sort of help text no matter how involved, not just formal training requiring tests, human teachers etc.
This is a big one; if safety is a factor, people need to learn how to use it. You don't get in a car and figure stuff out for your first time. It's not Angry Birds. Anything that comes with significant risk that isn't intimately familiar for your users should require some "training" of some form, even if it's just a warning. Not all dangerous things need this however; knives are dangerous, but anyone who can purchase one is almost certainly quite aware of what it is, how to use it and the risks involved with sharp things (little kids generally don't buy knives).
Similar to safety, but for the device/service/etc, not the user. If it's very easy to screw up and hard to recover, you need training. Ideally heuristics help, allowing error recovery, undo, redo etc, but sometimes that's not possible. This is why complex software generally has guidance or even certification. You might not set yourself on fire, but you might cost yourself/others thousands of dollars with a mistake.
Sometimes stuff isn't dangerous in any way. It's just really freaking hard to understand. A quick tutorial and a dedicated help section can go a long way in this situation and may help you avoid requiring extensive training. A way to mitigate this can be giving limited options at the start; Stack Exchange does this pretty well. SE is actually really complicated once you get into the tricky bits, but the "post question/answer, maybe get points" part is dead simple, and starting out, that's all you need to worry about.
If it's not possible/desirable to present a limited view or have a quick refresher course and the first-time experience of your app/device is that bad, a tutorial of varying length may well be necessary. Video games are a classic example of this; except for some dead-simple games like Super Mario it's likely that you'll at least need to show the player some buttons, indicate what things are deadly, show hints, etc.
Similar to complexity, sometimes it's just plain hard to get into something until you understand what you're doing. Video games are a good example of this. Many games start with either a tutorial, or watered-down early levels which get you familiar with your controls and abilities.
Building in training for enjoyment can be very different from training for other purposes, but it can also be the most effective when done well. Making training an engaging, enjoyable process can really help people understand, remember and not hate your training. Lots of video games do this well (see Metroid and gradually gaining abilities) and lots of video games do this terribly (see almost any Role Playing Game with a 30 minute tutorial).
If you can build your training into normal use of a device or service, that's ideal. This allows you to focus on enjoyment while making it engaging and memorable. Instead of hitting users with the wall of text and an "I read this" checkbox, guide them through a couple simple steps. Gamify the process and make it feel like an accomplishment when you're done instead of making it feel like a burden. This isn't always possible of course, especially with physical devices, but it can be done well in digital products.
Also remember it may well be necessary to include an option to opt out of tutorials/training/whatever depending on the application. There are many video games I stopped playing simply because I wasn't going through that tutorial ever again, and a few services that have scared me off just because I didn't want to deal with all the learning crap. As I'm sure you're aware, these can be very off-putting. Nothing is worse than treating your user like an idiot (regardless of whether they are) so "skip tutorial" options can be important unless safety/fragility is a severe factor and you have no way of verifying the user has previously completed the training.