That's because, to use Fire//Ice as an example, there's a "layout" value in the JSON that cards are stored as. "is:split" is actually just a search for cards with "layout":"split".
They don't, actually! If a card's layout says that a card has multiple "parts", there's a special "card_faces"...