Remember that each layer is independent of every other layer, and the original design of each protocol in a layer is that my layer cannot depend on your layer doing any error detection, or the error detection which my layer requires. Also, if you have a datagram which is destined for a particular layer (e.g. ARP for layer-2, or ICMP for layer-3), the layer for which the datagram is destined wants to be sure the datagram is valid as received, and it wasn't mangled between layers.
To your point, IPv6 has actually dropped error detection on packets because it assumes that the layers above and below it will perform error detection.