- To simplify greatly, one is interested in some sort of a "parameter space" for vector bundles, where it makes sense to say one bundle is the "limit" of sequence of other bundles, or to have a "curve" of bundles, and so on. Here you can compare it to simplest parameter spaces, like the projective space or a Grassmanian (in the latter space it makes sense, for example, to take a "curve" of linear subspaces, $C \to Grass$, which just means you are taking a family of linear subspaces parameterized by curve $C$).
Now it turns out that one just cannot construct a parameter space for all vector bundles as a a nice variety (or scheme), this space is somehow too large and too badly behaved.
At this point one has two choices - either construct a parameter space as something more complicated than a scheme (a stack), or restrict from all vector bundles to some subclass of those (moduli space of (semi)-stable bundles (sheaves)).
If you choose the first route, then your stack will be just a functor, which assigns to any parameterizing base $S$ a set of vector bundles on $X \times S$. [So that when applied to $S=\{pt\}$ one just gets all vector bundles on $X$]. If it happened to be representable by some scheme $M$, we would be done and just work with this "moduli space" $M$. However in this generality it is certainly not representable. Thus one applies the usual Grothendieck's philosophy of functor of points and tries to work with this functor as some sort of a space in and of itself. There is a lot of stacks machinery devoted to constructing "atlases" of sorts allowing one to do geometry.
If you take the second route, and consider all semistable sheaves, then an analogous functor which assigns to any parameterizing base $S$ a set of semistable sheaves turns out to be (co)representable, so that all is fine and we work with the representing scheme directly (and not through the functor of points).
Both points of view have their pro's and con's. It is harder to work with the stack directly, but it somehow keeps the information about all bundles or sheaves. Working with the moduli space of semistable bundles is much more direct, but you now need to worry about how one gets to the information about any old bundle starting from semi-stable ones (and there are ways to decompose a given bundle into (semi)-stable ones - look up Harder-Narasimhan and Jordan-Holder filtrations).
As is usual in mathematics, having both languages allows to shed light from different angles. I might be wrong, but the results one obtains in one language can very often be recast in the other.
If the book by Huybrechts is too technical, you can try looking at Le Potier's "Lectures on vector bundles" (although you won't find anything about stacks there).
Nothing really changes when we pass from vector bundles to sheaves. It is mostly a technical enlargement to get better properties of the resulting object.
PS. This answer is indeed excellent.