I'm thinking of using HDF5CreateLink to make a new link to the object, followed by HDF5UnlinkObject to kill the old link.
That sounds right.
if I want to actually delete a dataset or group (and reclaim the space it occupied), it sounds like I need to use h5repack, or else more manually copy all existing links and objects to a completely new HDF5 file?
Yes, if you want to reclaim the space in the file you need to use h5repack or your own equivalent. The HDF5 library does not reuse space used by unlinked objects as explained here.