XMPP Core is a protocol at (roughly) the same level as HTTP: it provides basic semantics for sending and getting data, and you can build your own application level protocols on top of it. XMPP IM is an application level protocol built on top of it that does something specific (instant messaging). It could have been built on HTTP as well, but they were designed to work well together.
If we're comparing XMPP core to HTTP, the difference is that XMPP core is async and stateful (like instant messaging sessions) and HTTP is synchronous and stateless (great for fetching documents).