In intuitive terms, what is the main difference? We know that homology is essentially the number of $n$cycles that are not $n$boundaries in some simplicial complex $X$. This is, more or less, the number of holes in the complex. But what is the geometrical interpretation of cohomology?

As to what cohomology actually measures, I think a general theme is "the failure of locally trivial things to be globally trivial", or perhaps "the failure of local solutions to glue together to form a global solution". In the de Rham cohomology of a smooth manifold, any closed form ω is "locally trivial" in that you can cover the manifold by contractible charts, over each of which a solution to dα=ω exists by the Poincaré lemma. The cohomology class [ω] measures the failure of existence of a global solution of this equation. Similar remarks can be made about simplicial, singular, and (especially) Čech cohomology. 


Let me give a somewhat elementary answer. Like a lot of things, this stuff (presumably) came out of calculus. Start with integrals of the form $\int_C \omega$, where $C$ is closed curve and $\omega$ a differential. If one assumes that $d\omega=0$, then by Stokes the integral depends only the homology class of $C$ i.e. $C$ can be replaced by any $C'$ such that $CC'$ is boundary of something. Dually the integral is unchanged if $\omega$ is replaced by $\omega+d(something)$. In other words, it depends only on the cohomology class of $\omega$. This can be carried out in higher dimensions, as well. At first glance cohomology seems completely dual to homology, and therefore seemingly redundant. But in fact it has more structure. Since you multiply (wedge) differential forms together, cohomology becomes a ring. This is still true in more general approaches such as singular cohomology. On the homology side, one has an intersection pairing, but this is harder to describe and only available for really "nice" spaces. Perhaps another feature of cohomology worth mentioning is that is contravariant: cohomology classes pullback from the target to the source under a map of spaces. This important in the theory of characteristic classes, where such classes are pulled back from to maps to certain universal spaces. Such classes measure the amount of "twisting" of bundles. 


I think Hatcher's book has a good elementary exposition of some of the differences between homology and cohomology. I believe it's in the introduction to the cohomology chapter. 


Cohomology is a graded ring functor, homology is just a graded group functor. As groups cohomology does not give anything that homology does not already provide. Whatever geometric interpretation you have for homology would mostly probably work also for cohomology. But the multiplication in cohomology allows better differentiation between topological spaces which is not possible with homology. In this sense cohomology is a finer invariant. Specific examples can be found in the book of Spanier. There are extraordinary cohomology theories, cobordism, Ktheory, etc., which are also important. These satisfy most of the EilenbergSteenrod axioms. Also cohomology can be generalized to algebraic geometry, which is very important. One cannot stress how important this is. Cohomology is the king there. One helpful way of thinking of (integral) cohomology maybe the following. In homology, you look at sums of simplices in the topological space, upto boundaries. In cohomology, you have the dual scenario, ie you attach an integer to every simplex in the topological space, and make identifications upto coboundaries. 


On a closed, oriented manifold, homology and cohomology are represented by similar objects, but their variance is different and there is an important change in degrees. For simplicity, consider homology or cohomology classes represented by submanifolds. Then if $f : M \to N$ is a smooth map between manifolds of dimension $m$ and $n$ respectively and $W$ is a submanifold of $M$ representing a homology class then $f(M)$ represented (really, $f_*([M])$ is) a homology class of $N$, in the same dimension. On the other hand, if $V$ is a submanifold of $N$, then we can consider $f^{1}(V)$, which is a manifold if $f$ is transverse to $F$. Its codimension is the same as that of $V$ (that is, $n  dim(V) = m  dim(f^{1}(V))$). Note that this preimage is generically at least as "nice" as $V$ (smooth is $V$ is, with reasonable singularities if $V$ has, etc.) whereas little can be said about the geometry of $f(W)$. That's one reason I think that cohomology is of more use in algebraic geometry. If you want to relate this view of cohomology to the standard one, a codimension $d$ submanifold of $M$ (that is, one of dimension $md$) generically intersects a dimension $d$ one in a finite number of points which can be counted with signs. The former defines a class in $H^d(M)$ while the latter a class in $H_d(M)$, and this intersection count is evaluation of cohomology on homology. This point of view is more applicable than it might seem since in a manifold with boundary cohomology classes are similarly defined by submanifolds whose boundary lies on the boundary of the ambient manifold. Since any finite CW complex is homotopy equivalent to a manifold with boundary, one can view cohomology in this way for finite CW complexes and often infinite ones as well. 


My geometric intuition about homology and cohomology of a space $X$ is that the first is an abelian group over maps from spheres into $X$ made commutative (allowing to patch maps together by cut and glue) and the second is maps from $X$ into spheres made commutative (again allowing to cut and glue). 

