Well, this is fairly simple to explain (and I think you know the explanation already)… History is based on object ID. Like with all other Rhino objects, when you join two or more of them, the original meshes are deleted and a new object is created with a new ID (one object=one unique ID). This is even the case for disjoint meshes. Thus, the ID change will break any history relation the original object(s) had with potential children.
Some types of modifications to one object can (could) possibly retain the original object ID and thus keep history intact. However, joining is probably not one of them, as that means two or more IDs become one - probably pretty difficult to decide which ID among the originals should be retained, so trying to keep the history link would be unreliable in any case.