It really comes down to what interpreters support.
Officially, Glulx delegates image-handling to Glk, and Glk delegates resource-storage to Blorb, and Blorb doesn’t and probably won’t support GIF:
GIF and MP3 are not going to become standard Blorb format types.
In the end, the game just tells the interpreter “hey make this glk function call”, and it’s up to the interpreter and its attached Glk library to find and display the image. Nothing in the Glulx spec stops an interpreter from supporting GIFs…but no interpreter I know of does.
A better bet is animated PNGs. The GIF format was never really meant for videos, and it’s not a very good image format in general (its compression is bad and it’s limited to a very small color palette). I don’t know if any native interpreters currently support APNG, but web-based interpreters like Quixe and Vorple should as long as the user’s browser does.
Alternately, you can go the Kerkerkruip route and just store each frame separately and swap them out within your game’s code. This option will work on all interpreters that support images, even if it’s a bit clumsy to use.