In 1-category theory, the easy direction (a) is invoked all the time. The hard direction (b) doesn't have to be formally invoked very often, because most adjoints can be constructed by hand (and even if you do initially construct an adjoint via the Adjoint Functor Theorem, usually you'll want to get a more explicit understanding of it as you move forward anyway). However, (b) is still used all the time as a heuristic consideration: if you want to know whether a functor admits an adjoint and it's not immediately obvious how to construct one, usually the thing to do is to check limit/colimit preservation.
In $\infty$-category theory, the situation is different (EDIT: At least superficially? Perhaps more deeply? See Mike Shulman's important objections in the comments below). There, (a) is still just as important, but (b) (in various incarnations) is invoked quite frequently. The reason is that in $\infty$-category theory, it is often difficult to construct functors explicitly! This is because it doesn't suffice to say what the functor does on objects and morphisms and check a funcotriality condition -- rather, you've got to specify higher coherence data all the way up. Adjoint functor-type theorems are used as ready-made packages where all of this coherence data can be supplied automatically. This is a central insight of Lurie and really one of the major factors making the whole theory useful.