I'll go ahead and share my secret.
You need the unit to be able to move onto both land and sea, so you make it an airunit. You purchase it and place it on land like any other air unit.
Then you give it carrierCost=0, which lets it land in empty sea zones as if there was a carrier there. So on the next you move your hull into the sea zone and it should land just fine (isKamikaze could work as well but this seems cleaner). Then you buy the battleship, and it should consume the hull just like it would consume a sea unit version.
In version 1.8 I had an XML with this working, life got in the way before I could share it though.
That is pretty creative and interesting. I wasn't aware that "carrierCost=0" allows air units to land in empty sea zones with carriers. I would definitely consider this somewhat of an edge case that is really just an outcome of how the current code was written.
I think the question here is what should "carrierCost=0" really mean and be used for? Should it allow air units to land in sea zones with no carrier? Or should it require a carrier but just take up no carrier capacity? Or something I'm not even thinking of? Whatever we come to a consensus on should probably be added to the Pact of Steel 2 comments so its spelled out somewhere.
PS. It would be great for some of the awesome map makers to take ownership of that Pact of Steel 2 XML to help me keep it up to date as many of you know the game XML better than I do.