Generally speaking, if you have a horrifically non-linear system you still want good performance on, or you have a very predictable system and enough sensor inputs to predict its behaviour and you want to get better performance than you can get from a purely reactive form of control (though, in a lot of cases like that, PID + some form of feedforward control is almost as simple and can work really well without needing to dive into more advanced controllers). PIDs can control most any system but they are rarely the optimal controller for any given system. That gap only tends to be really large in the situations I've mentioned, though.
>if you have a horrifically non-linear system you still want good performance on
Even in that case PID is often the answer. Only that you vary the P, I, and D factors. It's called gain-scheduling [1]. You linearize your non-linearities at multiple points, and change your PID parameters to match.
Of course non-linearity is a very broad concept. So this may or may not apply to your non-linear system. The class of linear systems is easily described. The class of non-linear systems is everything else.