Question: Do we use cache memory in microcontrollers, if not, why not? If yes, what is its application in embedded systems or it is enough just to have RAM?

Answer: 
Cache memory adds a level of latency unpredictability that may be unwanted. A lot (most?) of microcontrollers are used in a realtime setting where you have to budget for worst-case timing. It does not matter if your code is fast *on average*, if there is a chance that it won't meet the deadline in *worst case*. Worst case would be that your code or data is not in the cache, and since you have to budget for it anyway, the cache just adds extra cost and complexity.

Some microcontrollers I have worked with has a small embedded SRAM that can be used as a "manual cache". You put stuff there that must have a low latency, be it code or data.

Now, the term "microcontroller" is becoming more and more bloated. Is the 8-core ARM processor in your phone a microcontroller? If so, then yes, of course it should have a cache.
Having a level 1 cache is a trade-off between speed and cost. For speed, the bigger you make memory, the the longer the path to the data gets. That means that it'll take longer and longer (in terms of latency) the more memory you add. At some point performance degrades due this latency, which is the point when adding a level 1 cache makes sense. Cost is also a consideration, in that high-speed memory is more expensive than other types of memory. Finally, an additional benefit is that caches can make the micro-controller oblivious to the *kind* of memory it is read from.

Micro-controllers have typically had small memories, and therefore they often have no level 1 cache. In a sense their whole memory could be considered a level 1 cache! However, many micro-controllers today are very capable and start crossing over into the micro-processor territory, with bigger memories and therefore also level-1 (and level-2) caches.

Having caches adds a rather significant toll on the programming side, since real-time behavior on cache-misses can be hard to predict. Sometimes, this doesn't matter and/or can be worked around, but in the cases where it does there are a few options:

* Use smaller micro controllers for specific sub-tasks in a larger system.
* Use a chip that has embedded physical real-time units.

The first solution is quite attractive, as micro-controllers are cheap and capable. However, communication between the controllers and the main (CPU) unit could become an issue. This is why chips with embedded real-time capabilities can be a better solution.

As with all engineering, there are pros and cons for every solution. Pick the right tool for the job!