I think it is about half due to variable refresh rate and less than half due to hardware efficiency improvements, and maybe 10% due to a larger battery. The 12 and 12 Pro got 11 hours of streaming playback, the 13 gets 15 hours with it's larger battery and more efficient hardware, while the 13 Pro gets 20 hours with it's variable refresh rate.
It appears that the battery on the 13 and 13 Pro are close in size since they both get 75 hours of music playback. The battery is slightly larger on the 13 than the 12 which got 65 hours of music. (I assume hardware efficiency would have very little effect on AAC decoding at this point, there couldn't have been much left to optimize.)
So all in all, looks like variable refresh will be a potentially very impressive feature, both for smoother UI and better battery life.