I'm quite new to these things, so I was under the impression that I had to program in machine language
No. A "programmer" simply loads the hex file onto a device. It doesn't care what language was used to generate the hex file.
The Arduino board uses the bootloader as a programmer.
You are (trying to ) use an Arduino board as a programmer.
A dedicated programmer is just that, a device intended for programming a chip. The USBtinyISP is a nice one because it is supported by avr dude, is cheap, and very robust. If you ever need to return the bootloader, the IDE is already configured to use one.
This is the one I use:http://www.adafruit.com/products/46
I tried Arduino as an ISP once, and found it way to cumbersome. Then I tried a bus pirate, which works pretty well too. Finally, I settled on a usbintyisp.