Very well put.
Please don’t talk about this like it’s some kind of sloppy mistake. Obviously I hate leaky code, but in this case the only way to avoid it would involve a custom memory management layer for these message objects. Even if that could be made efficient, it adds unnecessary complexity and risks new bugs. So losing a tiny number of bytes when your DLL gets unloaded (maybe a couple of hundred bytes per run of the host) is the pragmatic option.