Yes, it is not exactly the same thing but the point is: by getting off at B you are making the B->C flight travel with a wasted (empty) seat.
Which they would have preferred to either sell to someone else or use for moving a pilot or technician to C.
(Note also that this trick of getting out mid-itinerary only works if you do not have checked baggage, because that will arrive in C, and neither the airline nor the airport will be happy to reroute it to wherever you thing you want to go next.
Flying is expensive and logistically complex. Just making sure you end up where your ticket say is complicated. If you (as a customer) decide to change your plans you are making everything more complicated (and possibly preventing other customers to pay for the whole itinerary).
The actual question here is why they won't sell you a ticket for A->B for the actual cost of that leg of the A->B->C flight, and then sell the same seat for B->C to someone else.
See above: let's say that on Frankfurt-Hannover and back you get on average 52 passengers a day, and Hannover-London is more or less the same, while people flying Frankfurt-Heathrow are so numerous that direct flights are always full and therefore you need to offer FRA-HEA with a stopover to satisfy the extra request.
If you are sure that 80% of your passengers will go to Hannover only to then fly to London (and back) your prices will reflect that... and Frankfurt-Hannover cannot be lowered too much because you still has to try to reach your quota for the flight per se.