You could just not set it to infinite loop and hook a procedure to set a flag and restart the track upon stopping. So long as you don't unload the music file I think it could restart almost unnoticed.

The problem of you trying to manually stop the track and having it restart then would easily be averted by putting the restart code under a flag condition. To prevent it from restarting on stopping, you'd simply set the flag to be true.

So this procedure might look something like this

[pascal]
var
MusicLooped: Boolean;

procedure onTrackStop;
begin
if (not disableMusicLooping) then
RestartMusic;

MusicLooped := True;
end;[/pascal]