Parenting messes up transforms - where is the offset stored?
The difference between the parent and child is stored on the child when the parent is set.

It's a matrix that can only be accessed through Python: bpy.types.Object.matrix_parent_inverse