Generic Routing Encapsulation aka GRE was originally developed by Cisco. In the recent stages, it was developed to transport packets from one network to another. As the time grows, it became a part of VPN. It is used to route non routeable packets from the IP backbones. GRE mechanism is used by various protocols to encapsulate the packet like PPTP uses GRE encapsulation for establishing tunnel and Rosen draft is fully based on GRE to provide Multicast Over VPN (MVPN) services in MPLS cloud.
GRE tunnels are completely stateless because of that, it doesn't contains the information of the remote end peer.During the creation of interface tunnel, we need to specify the valid source address or interface and destination address. Assume the remote end tunnel creation process is not in place but still the line protocol of tunnel is up which was created at one end. So it means, GRE has nothing to do with the remote destination address reachability. Due to this feature, GRE tunnel never bring down in case of remote failure or remote tunnel absence which leads lot of problems of flushing routes from the routing table. The problem was overcome by using GRE tunnel keepalives.
A decade or two decades ago, GRE was used for serving VPN to the customers. During that time, SP provide GRE connectivity among the remote sites of the customers. For complete traffic forwarding, a routeable IP address was extended from PE to CE and on the basics of that IP address a GRE tunnel was established. The main disadvantage of this model is that customers require (n*n-1)/2 tunnels for full mesh which was really a cumbersome one. This was overridden by MPLS because it provides full mesh by default.