I found that ShapeShift generates new address for each transaction. How do they do that? Is it possible to exchange the coins in the same manner as ShapeShift do, but without the creation of new address?
This is called Hierarchical Deterministic key derivation.
New public keys, and by extension Bitcoin addresses, can be generated from a set of parent public keys. This way, the front-end of Shape-shift never needs to communicate with a "hot wallet" and can generate a new set of addresses for every user transaction.
To spend from these addresses, Shapeshift simply derives the corresponding private key (server-side) from its parent private keys.
Child private and public keys can be derived in parallel (front/back-ends), maintaining a fire-wall between them.
Intro to HD Wallets
I am not aware on the way how shapeshift has implemented their solution, maybe a developer from this company reads this forum and can provide an answer.
Generally there are two approaches for different addresses on a webpage:
1.) the background is running a bitcoin core node (or any other wallet software which fits their needs), and everytime a user visits the webpage, the server asks the node for "getnewaddress", and displays this to the browser. There might then be some logic in their back office app, to convert/move values to the correct "other chain".
2.) usage of HD keys. HD keys come with xpriv and xpub, which can generate a set of 2^31 keys from a single privkey. There is a slight problem with this, these HD keys cannot be handed out easily to the customer, cause they are derived from a single privkey. But for the shape shift service it is more than sufficient, cause they use "one-time" addresses...