Question: If the external memory (1 MB) in 8086 based system is segmented into code, data, stack and extra which are all 64 kB, what do we do with the rest of the memory? Does it go waste?

Answer: 
In the 8086 each segment is, yes, 64KiB. Those segments can move though.

You set a "segment pointer" which defines where a segment starts. It acts as an address offset, which is added to the internal 16-bit address of the program counter (or other indexing register).

Changing the segment pointers is a trivial matter, so although you can only access 64KiB at a time, you can move that 64KiB window around at will to access the whole 1MiB of memory space.
Also note that since the 8086 had a 20-bit addressing scheme, those segment offsets overlapped every 16 bytes. 

For instance if you had a CS at 0x0010 and a SS at 0x0011, [CS]:[0x0010] = [SS]:[0x0000]

see: <http://en.wikipedia.org/wiki/Intel_8086#Segmentation>