Why was 29.4 released after 31.1?
Because old versions also receive bugfixes. If you have some new features, then they usually land in a new version. However, if some bugs are found, then they are fixed in the latest version, and also backported to some older ones, just because some users don't want to upgrade immediately, and want to stay on some older version for a bit longer.
If you just want to use the latest version, then stick with the biggest number. But if you want to upgrade more slowly, then you can follow minor versions, and upgrade later to some next major release.
Im assuming it has something to do with this whole Ordinals/BIP110 thing
Not really. Even in the latest version, you can still limit OP_RETURN to 83 bytes, or set your relay fees to 1 sat/vB, if you really want. It will make your node slower for no reason, but well, your node, your choice. Many developers, who build new versions from sources, usually use versions, ending with "99". And if you don't trust Core developers, then you can always build the code from sources, and apply any changes you want. By the way: this is how new features are tested: people just make their changes, use the to-be-released version 99 for a while, and later it just becomes official, if it is good enough, and just gets the next number, after being merged.
but I would like to learn the specifics of why and what 29 does compared to post 29
Each version has some release notes. Just read them, if you need the details. Or look at the commit history, if you don't trust it, and you want to verify some things.