Hey there fellow human beings, it’s been a while since I’ve responded to this post, but I believe that I have found a suitable solution to this issue. It isn’t 100% perfect, but it’ll have to do for now. This method is largely based on @ExtraTorpedo 's method shown in the question’s comments.
First, I made a structure that contains (at least) two sounds: one for the beginning and one for the looping song. This way it’s easier to move them around together. Then I made an invisible actor, shown in the photo above. I gave it an AudioComponent and added the “OnAudioPlaybackPercent” and “OnAudioFinished” events (by right-clicking on the component and selecting Add Event).
OnAudioPlaybackPercent is more accurate, but cannot account for changes in the GlobalTimeDilation, since music doesn’t speed up or slow down like geometry does. This works by taking the length of the first song (once the AudioComponent has its sound set) and making a delay before playing the looping portion. This is like, 99.5% accurate and is noticeable if you’re studying it, but in the heat of the moment, players of your game won’t notice.
OnAudioFinished has more of a hitch, but will definitely account for GlobalTimeDilation. This event triggers when the AudioComponent… is finished playing. So just tell it to loop after that.
Choose which one of these two methods works best for your project. With either method, there will be a substantial loading hitch when first trying it out, but this is editor-only (I hope). I believe in a packaged build there will be no loading hitches.
I’m currently working on a basic plugin that comes with some basic functions and objects to work with when first starting up making a new game, including this one. Might be a while before I publish it, but just so you know.
To be honest, this solution is unsatisfactory in my eyes. Music is one of the most important parts of video games, and Unreal Engine seemingly has overlooked this. Please make a simpler, easier solution to make beautiful music for our projects!