Imagine a network with three areas: 0, 1 and 2. Area 0 is connected to 1 and 2; area 1 is connected to 0 and 2; and area 2 is connected to 0 and 1. Further, imagine that in this network, there is nothing special about area 0 -- in this network, backbone rules don't apply.
Area 1 learns about routes from area 2 from two sources: area 2 and area 0. Now let's say that because of metrics, the shortest path to area 2 is through area 0 (instead of your direct connection). Area 0 also learns about area 2 from area 1 and area 2. But because of misconfigured metrics, the shortest path to area 2 is through area 1.
So if you send data from area 1 to area 2, the packets get forwarded to area 0, but area 0 forwards them back to area 1. This is a classic routing loop.
Instead, if we make area 0 a backbone, and say areas can only receive routes from the backbone, then there is only one possible path to area 2 -- through the backbone. Area 1 will ignore routes being advertised directly from area 2. In this way there are no multiple paths, and therefore no loops.