Andrew Poelstra coined the terms “Small Script” and “Big Script” for this. With Small Script (4 byte elements), you can do arithmetic and comparisons such as OP_GREATERTHAN, meaning you can have arbitrary logic. In contrast, in Big Script, you can’t make any comparisons beyond OP_EQUAL, but you have native access to hashing and signature opcodes. so CAT gives you a way to bridge the gap between these two domains.
We wrote a fairly detailed documentation of Big Script vs Small Script in section 2.2.3 here: https://eprint.iacr.org/2024/1802.pdf
You need both combining and splitting. Splitting is used to perform arbitrary logic (as mentioned above), and combining is used for native hash/signature operations. You can achieve both with either CAT or SUBSTR.