Well!! you cannot use arduino as programmer to other controllers. The Atmega sitting on the arduino board is flashed with a bootloader code, which in turn updates a part of code to program it dynamically. its like an operating system to you and the codes that you put on is a program(say ms word) on it.
Surface mounted controllers are used to save space on a board. In reality, all controllers are made in a small package, then according to final result requirement, wires are pulled out to stretch the device. So you can say a DIP is having a small smd core and those smd core pins are extented to make it DIP.
SMD devices are programmed on board. they have same programming pins. so you connect the respective pins with your programmer and program it. Firmware that you write doesnot care for IC package.
So for smd its just that you lack portability of DIP, but you save a lot of space on your board.