That's sort of what I want to do with DB3.
What you can do basically is, using some smart algorithms, match up like parts of disparate DNA strands, and then "cross over" (eg: swap bps downstream) for the like parts. The end result is basically a shuffled and relatively meaningful DNA strand. I think the program does this already (Eric coded it up a while ago). This matches very well with actual biology. The nice thing being that you don't need IDs or anything to handle this sort of thing. You can handle it automatically by just doing some pattern matching.
What makes the current system hard is that very very different bots can sexually reproduce, but not all properties in the system can be mixed very well. Like clearly raping a veggy is over powered. Since none of the DNA matches, no cross over event occurs. So basically you've managed to inject your DNA in to a veggy cheaply and quickly. The problem is that there's no down side to being a veggy really. Veggies just get free energy. Part of what I wanted to do with DB3 involves fleshing out the system better so that it's meaningful to be half veggy and half animal, with clear strengths and weaknesses.
As far as haploid/diploid: if you look at simple unicellular creatures which sexually reproduce, it's actually really, really interesting. In our multicellular world, we think in terms of male, female, and child. But in the world of cells sexual reproduction is more like fusing two creatures together (eg: Archons in Starcraft). Fungi, for instance, basically alternate between haploid generations and diploid generations. See
this.
I think this sort of thing would make far more sense to bots. There would be a "fusing" stage where two haploid individuals pool their resources during times of scarcity. The two DNA strands sort of share control of the hybrid diploid creature. When times become better, the hybrid creature splits back apart in to either original bot. But during that process, the two strands take time to swap parts of their DNA with each other. The only hard part is figuring out how two DNA strands can share control of a single bot with each other. I don't have any really good options. You basically want to run both in parallel, and "average" their actions together. But an actual average wouldn't really work for things like memloc or shoot (-1 and -6 would average to like -3. Not the same thing at all). You could swap control of the bot every other cycle, but that feels really inelegant to the point that I can't imagine successful bots ever fusing voluntarily. The resulting bot would be way to schizo.
For DB3 I was hoping to frame the DNA in such a way that all sysvars operate on a gradient so that averaging values together actually does make sense. But even if that works, you run in to an issue with DNA trying to vote for much larger or smaller values than it really wants in an effort to force the values to be what it really wants (eg: strand 0 votes for 10, and strand 1, knowing strand 0 will vote for 10, votes -10 so that the average will be 0 like it wants). But maybe that's not a bug, but a feature. Two cheater strands won't really work well together, as they each try to get in to the other's heads.
Anyway, that's my brain dump on the matter.