You are right that to have a universal quantum computer you need to have a basis gate-set to which any possible quantum operation can be reduced to.
However, this does not mean you cannot have gates that can be constructed from each other in your native gate-set. For example, in the gate-set you shared, you can implement an $X$ gate using two sequential $SX$ gates. So why have a separate $X$ gate? Well, because, at the pulse level, there might be a more efficient way to implement a commonly-used gate like the $X$ gate than by using two sequential $SX$ gates. In the case of IBM's hardware, an $X$ gate is implemented to take just as long as an $SX$ gate instead of twice as long.
In the case of the $I$ gate, you might wonder why even add it since the identity corresponds to not applying any gates at all, making it trivial. However, in some situations you want to keep an $I$ as part of the native gate-set in case you need to have a qubit idle for some amount of time. In the case of IBM's hardware that's what the $I$ gate does if you don't let the transpiler optimize it out of your circuit.
Lastly, you ask if we could remove $RZ(\theta)$ and still have a basis. The answer is no. You need $RZ$ to be able to span the majority of the Hilbert space. With only $CZ$ and $SX$ you can't do that. For example, in the case of a single qubit, how would you implement something as simple as a Hadamard gate with only an $SX$ gate? At a minimum, you need a two qubit gate and a pair of single qubit gates dictated by the Solovay-Kitaev theorem (e.g. $H$, $T$, $CX$).