What is Tomcat? Is it a Web Server? What can Tomcat do? How is it different than Apache Web Server?

As it was a bit confusing for me, I made a small research on these and wanted to share some notes here.

One very good resource is here

What we should keep in mind from this answer is:
In general, the The Apache HTTP Server ("httpd") is just a plain old web server designed to serve static web pages. There are plenty of modules which can be installed to enhance Apache's abilities so that it can serve dynamic webpages using various technologies such as PHP, CGI or whatever, but the httpd is just a plain old HTTP Server.
I think rest of the answer is not very clear, the part explaining what Tomcat actually is so let's move on to some other resources.. 

The second resource I used is this

Even the question itself starts with good information: I know that Tomcat is written in Java and the HTTP Server is in C, but other than that I do not really know how they are distinguished. Do they have different functionality?

And a comment in the accepted answer gives us a lot of nice information:
Tomcat does indeed bring with it a capable web server. Tomcat is a Servlet/JSP container and also offers a web server. Tomcat's web server is quite good, able to handle most small and medium web site needs. For various reasons, some folks choose to ignore Coyote and instead use Tomcat's Servlet capabilities behind the Apache httpd web server product.
Tomcat = (Web Server + Servlet Container + JSP Environment). The web server is ON by default when you run Tomcat’s startup.sh script, listening on port 8080 for incoming connections (HTTP calls). Tomcat is pure Java, with its own web server implementation (Coyote).
This gives us the hint that Apache Tomcat actually is a collection of a few modules. Wikipedia has good information on this here:

Tomcat 4.x was released with Catalina (a servlet container), Coyote (an HTTP connector) and Jasper (a JSP engine).

Catalina is Tomcat's servlet container. Catalina implements Sun Microsystems' specifications for servlet and JavaServer Pages (JSP). In Tomcat, a Realm element represents a "database" of usernames, passwords, and roles (similar to Unix groups) assigned to those users. Different implementations of Realm allow Catalina to be integrated into environments where such authentication information is already being created and maintained, and then use that information to implement Container Managed Security as described in the Servlet Specification.

Coyote is a Connector component for Tomcat that supports the HTTP 1.1 protocol as a web server. This allows Catalina, nominally a Java Servlet or JSP container, to also act as a plain web server that serves local files as HTTP documents.

Coyote listens for incoming connections to the server on a specific TCP port and forwards the request to the Tomcat Engine to process the request and send back a response to the requesting client. Another Coyote Connector, Coyote JK, listens similarly but instead forwards its requests to another web server, such as Apache, using the JK protocol.This usually offers better performance.

Jasper is Tomcat's JSP Engine. Jasper parses JSP files to compile them into Java code as servlets (that can be handled by Catalina). At runtime, Jasper detects changes to JSP files and recompiles them.

You may also be interested in this page. 

The information I find here particularly important is:  
Apache Tomcat and Apache HTTP are completely different server technologies. It is impossible to use a plugin for Apache HTTP server with Tomcat.
Apache HTTP server is developed in C and so are the plug-ins. On the contrary Tomcat is now completely developed in Java. Tomcat doesn't only serve static content, but it can also serve JSP pages and Servlets.
In this post I tried to summarize the knowledge I have found around. This will help me remember this information whenever I need it, and hopefully is useful for you as well.

Here is an image that will summarize the information above:

The following steps explain how the web server creates the web page:
  1. As with a normal page, your browser sends an HTTP request to the web server. This doesn’t change with JSP, although the URL probably ends in .jsp instead of .html or .htm.
  2. The web server is not a normal server, but rather a Java server, with the extensions necessary to identify and handle Java servlets. The web server recognizes that the HTTP request is for a JSP page and forwards it to a JSP engine.
  3. The JSP engine loads the JSP page from disk and converts it into a Java servlet. From this point on, this servlet is indistinguishable from any other servlet developed directly in Java rather than JSP, although the automatically generated Java code of a JSP servlet is not always easy to read, and you should never modify it by hand.
  4. The JSP engine compiles the servlet into an executable class and forwards the original request to another part of the web server called the servlet engine. Note that the JSP engine only converts the JSP page to Java and recompiles the servlet if it finds that the JSP page has changed since the last request. This makes the process more efficient than with other scripting languages (such as PHP) and therefore faster.
  5. The servlet engine loads the servlet class and executes it. During execution, the servlet produces an output in HTML format, which the servlet engine passes to the web server inside an HTTP response.
  6. The web server forwards the HTTP response to your browser.
  7. Your web browser handles the dynamically generated HTML page inside the HTTP response exactly as if it were a static page. In fact, static and dynamic web pages are in the same format.