XMP is a tricky thing. There are two main ways to store XMP data. In a sidecar and by writing directly to the original image. Some people prefer one, others prefer the other. I try to avoid writing to the original because of the chance of data loss / corruption, which can definitely happen in these cases.
For proprietary RAW files, only sidecars are supported by apps (in general) due to their proprietary nature. For DNG, JPEG, etc., the XMP can be written inside (again, I don’t do that, but may in the future).
The name that Nitro uses for JPEG and DNG is _.xmp. That’s to handle the case of RAW+JPEG. If you have an R+J pair and edit both of them, both would get named abc.xmp which would cause a collision. That’s why I use _.xmp for DNG, JPEG, etc. However, this causes issues with other apps that aren’t doing that. There is also the problem of case-sensitivity. While macOS is not case-sensitive, iOS is, so the file name always uses lower-case convention. This is also what Adobe does.
I do not understand why Graphic Converter would replace the JPEG with XMP – do you really mean that Graphic Converter replaces the JPEG with an XMP (rather than have two files)? That’s very odd.