You can add and remove nodes, there is no problem. But note that, every time a node joins or leaves Hazelcast tries to balance data among the cluster; if you have TBs of data, you may see some performance decrease on some nodes for a short period.
If you are using AWS join configuration, you should be able to add nodes seamlessly. We are doing our big data test on EC2.
You do not need to call shutdown, but it is the best way to inform others about removal. Normally other nodes can detect leave of a node, because by either shutdown hook or JVM termination, Hazelcast's socket closed properly. But in some cases, other nodes can not notice termination of connection. For example when you pull off network cable of a machine. You can see same behavior on EC2 since its network is not that much reliable. If the others can not notice the dead node immediately (which will occur when they do not receive socket close message), they will wait 'hazelcast.max.no.heartbeat.seconds' seconds (default 300 seconds) and then they will drop dead node from list.