Yes, you can serve HTML files using FTP. However FTP is a heavy-weight, stateful, protocol and assumes you will be staying on the same server. It is optimized for downloading larger files (where the setup overhead is amortized over the size and number of downloads) HTTP is very light-weight (you can communicate to an HTTP server using TELNET much easier than FTP, especially before PASSIVE FTP) and is designed around HTML -- the concept that in the course of your navigation you will be visiting many different servers and grabbing only a couple of files at a time from each.
Gopher existed before HTML and was very popular. It was also a light-weight protocol. It just didn't have the presentation and ease of entry that HTML had.
The short answer is, people invented all sorts of protocols for all sorts of reasons (i.e. doctoral theses) -- HTTP managed to come along at the right time and have the right set of features.
BTW, CGI wasn't even a part of HTTP at the beginning. It came along later -- and it was far easier to shoehorn CGI into HTTP than into FTP because of the simple, stateless protocol.
Oh, and there was no "web" before HTTP/HTML. The web needs HTTP because HTTP created the web.