The IP stack in the kernel of a running instance is only aware of the instance's private IP address.
The IGW is a 1:1 NAT device with a static map, which translates the instance's private IP to the instance's assigned public IP, if it has one, for traffic to/from the Internet. Configuration of the IGW is fully automatic. The IGW is not a physical device in a physical place. It's a logical entity whose functions are performed by the network infrastructure itself.
Instances without a public IP cannot be situated on a subnet whose default route is the IGW (called a "public subnet" because it is intended for use by instances with public IPs). Instead, they must be placed on a subnet whose default route points to a NAT Gateway or a NAT Instance (a "private subnet," intended for use by instances with only private IPs), so that their traffic can ultimately use the public IP address of that NAT device for outbound Internet access.
It is not possible to have an EC2 instance with a private IP address that is outside the CIDR range for the subnet where the instance is placed. If you change the IP address on the Ethernet interface of an instance, itself, the instance simply becomes inaccessible.
When an EC2 instance has a public IP, either because it was launched with one requested or launched on a subnet configured to assign them automatically, that address comes from a public pool and will go away when the instance is stopped or terminated and cannot be reclaimed. An EIP works the same way, during operations, except that it is allocated to your account until you release it, so it does no change if it is attached to an instance that is subsequently stopped. You are not billed for any EIP that is the first EIP attached to a running instance. Additional EIPs on the same machine, EIPs attached to a stopped instance, or EIPs attached to nothing, are subject to a charge.