This is a really sloppy summary. First, the given example is broken (the numbers in the nodes change from fig 1 to fig 2). Second, the delete operation is only like the insert operation if you look at it from a distance, squint, and tap your heels together three times. Implementing the delete is about an order of magnitude more difficult than the insert, IMO. An article on the details of that would be enlightening.
(Personal anecdote: in college, I spent a nightmarish two days implementing the delete operation on a B-tree, because I had put it off until the last minute, thinking that it was "just like the insert, but with contractions". I was wrong. I don't think I've spent that much consecutive time in one chair before or since....)
b-trees. ugh. i wrote code around b-trees in my data structures class in college. but to my surprise, when i got out, pretty much no one in the "real world" (hiring for entry-level positions) use them. they mostly use things that we didn't ever actually play around with -- stuff like hash tables.
B-trees (and related data structures) are pervasive in the real world. Pretty much any application that requires high speed access from disk uses them. Think about filesystems, databases, etc... They're hugely useful.
But they're not useful for the same purpose as a hash table, which is also a pervasive data structure, but for a different problem area: constant time access to in-memory data.
(Personal anecdote: in college, I spent a nightmarish two days implementing the delete operation on a B-tree, because I had put it off until the last minute, thinking that it was "just like the insert, but with contractions". I was wrong. I don't think I've spent that much consecutive time in one chair before or since....)