Why is helicity a good quantum number while spin isn't?

The Dirac Hamiltonian for free particles doesn't commute with the $z$ component of the spin operator $\hat S_z$, but it does commute with the helicity operator $\hat h=S⋅p$. This means one can know simultaneously the energy and helicity of a particle.

The Hamiltonian does not commute with $\hat S_z$, so the same is not true.

For more information about good quantum numbers, and why they are called "good", click here. You will note that:

Systems which can be labelled by good quantum numbers are actually eigenstates of the Hamiltonian. They are also called stationary states. They are so called because the system remains in the same state as time elapses, in every observable way.

Side note: Helicity can be considered to be the most fundamental quantum number for massless particles since it distinguishes between the two inequivalent representations of the Poincaré group.

There is generally no reason for spin to be conserved (i.e., a good quantum number) if it isn't the only form of angular momentum in a system. Total angular momentum ($\mathbf{J}$), consisting of orbital ($\mathbf{L} = \mathbf{r} \times \mathbf{p}$) plus spin ($\mathbf{S}$), is conserved (corresponding to rotation invariance).

It happens that the Schrödinger equation (the nonrelativistic limit) for a particle with spin conserves orbital and spin angular momentum separately, because spin appears as a separate quantum number uncoupled with motion. However, the Dirac equation couples spin with motion via the $\gamma$ matrices.

Helicity is manifestly conserved when written as $\mathbf{p} \cdot \mathbf{J}$, which is equivalent to $\mathbf{p} \cdot \mathbf{S}$ because $\mathbf{L}$ is always orthogonal to $\mathbf{p}$. (Why use helicity and not $J_z$? While $J_z$ is conserved, it doesn't commute with $\mathbf{p}$. We would like to use eigenstates of $\mathbf{p}$, i.e., plane waves.)