I was aware of those two complications. I just wanted a native way to play simple animated gifs, but I guess it’s time to address the gif complications as well.
For the purpose of testing, I created a procedural test gif image using my own image manipulation library. The testing gif contains 80 pages, but each page is palettized (indexed), and all of them share a common palette of just two colors. So, despite the rather large amount of pages, the resulting gif file is small. The animation shows a “swirling” effect growing exponentially from the center. This will help identifying differences in tests about gif complications.
The original “simple” image has a fixed 100 ms frame time and it is supposed to loop forever. WebPositve does display the test image properly, and it respects looping as well:

Now, if you manually change filetype to video/mpeg, MediaPlayer will play the animation with the correct frame time, but looping is not respected (it just plays once and that’s it). Fast forward / rewind controls won’t work, and if you drag the time bar to the beginning then press Play it will replay the animation, but with occasional crashes (those can’t be trivially reproduced, they just seem to happen randomly).
To test complication #1 in @humdinger’s post, you can easily optimize the image so that each page only provides new data and the rest is borrowed from the previous page. All you need to do is to use gifsicle, a great little tool (which is of course available in HaikuDepot):
gifsicle -O3 test.gif -o test_optimized.gif
This will create an optimized version of the test image. I am not posting that one here because there is no visible difference in the resulting image. However, the optimized image file is, as expected, smaller in size. You can verify each page only contains new data by loading the optimized gif to Gimp, or similar applications that are able to show each frame individually.
If you drop that optimized gif in WebPositive you won’t see any difference, it will render the image perfectly. Surprisingly enough, manually changing the filetype to video/mpeg will open the file with MediaPlayer, and the animation is rendered correctly even with the optimized version of the gif. However, all the issues mentioned before for the normal gif remain.
Next, to test varying frame time (complication #2), I modified the program that creates the image so that pages 21 and 61 (the frames with the maximum swirling effect) have a frame time equal of 1000 ms instead of 100 ms. This “pauses” the animation for one second at that point. Once again WebPositive will render the image properly, and it is aware of the varying frame time:

However the trick to open the image with MediaPlayer does have the same issues as before, plus it completely ignores varying frame time. Animation is played as if all frames had the same frame time, which is not the case.