Yes, DrawOrderTimeline has to use ints and then reorder the skeleton's draw order. It can't store a list of Slots because the DrawOrderTimeline is stateless and Slot is specific to a Skeleton. It could store a list of SlotDatas, which aren't Skeleton specific, but then it has to look up the Slot in the Skeleton, so using indexes is better.
I'm happier with the draw order loader code now. My first go at it had some problems. It is still pretty hairy, but I wanted to avoid storing ALL the slots in the JSON/binary for every draw order key. The JSON isn't very concise, but the binary is (just two ints (slot index and offset) for each draw order change). I might rename "offsets" to "changes" in the JSON.