Personally, I felt like I understood characteristic classes better once I stopped trying to understand them by visualizing them, and switched over to understanding them in an axiomatic context like you will find in Milnor-Stasheff or Bott-Tu. But I do still keep a few intuitions around about them. Since I work in geometry and topology some of this might be alien to a purely algebro-geometric point of view, but it may still be useful.
I think the clearest characteristic class to understand "visually" is the Euler class, which measures the primary obstruction for a (real, oriented) vector bundle over some space $X$ to have a nonvanishing section. A nonvanishing section of a vector bundle is equivalent to the associated unit sphere bundle admitting any section at all, so I'll switch to talking about sections of sphere bundles.
The picture is simplest for $S^1$ bundles. Fixing notation, let $S^1 \to E \to X$ be an $S^1$ bundle over $X$. Here, the class will be valued in $H^2(X, \mathbb Z)$. Via the universal coefficient theorem, (most of) the content of this class can be expressed in the following way: an element of $H^2(X, \mathbb Z)$ is a ``homologically coherent'' way of assigning elements in the coefficient ring ($\mathbb Z$) to the elements of $H_2(X, \mathbb Z)$, however you like to think of them. Working with cellular homology, what we need to do is assign integers to $2$-cells, and these integers should in some way measure the failure for the vector bundle in question to admit a section over this $2$-cell.
Taken naively, this problem is stupid: a $2$-cell is contractible and so any bundle over it will admit a section. But this isn't a productive view to take if your aim is to attempt to patch together the various sections that you can construct over the $2$-cells individually. The right way to approach this is to start with a fixed section of the bundle over the entire $1$-skeleton of $X$, and then ask about extending this section over the $2$-cells. (A section will always exist over the $1$-skeleton, because the fiber is $0$-connected).
So let $D$ be a $2$-cell. There's a fixed section of $E$ over $\partial D$. If we trivialize the restriction of $E$ over $D$ by choosing some identification with $D \times S^1$, in these coordinates, the section along the boundary is some copy of $S^1 = \partial D^2$ sitting above $D^2$. Projecting onto the fiber yields an element of $\pi_1(S^1)$, and this is what we define to be the value of the Euler class on the cell $D$!
Why is this a useful invariant? Recall that the problem at hand is to study the obstruction to finding a section of $E$ over $D$. Once we have trivialized $E|_D \cong D \times S^1$, this is equivalent to finding a lift of $D = D^2$ to $D \times S^1$ that extends the section on the boundary. But this can be done if and only if the homotopy class of the section along the boundary is trivial, which is what the Euler class is measuring.
This is explained with some nice pictures in a book by Montesinos called Classical Tesselations and Three-Manifolds. I'm also sketching for you the basics of ``obstruction theory'', which provides a nice way of developing a topological theory of characteristic classes. In this context, one thinks of the Stiefel-Whitney classes (and the Chern classes, too, for that matter) as obstruction classes, where the obstruction problem at hand is to find a certain number of linearly independent sections of your vector bundle over a certain skeleton of your base space.