Programing an ATmega328 with a Leonardo

To answer your first question, I don't see any real reason why you couldn't program an Atmega328 with a Leonardo, but somehow this seems to be making things harder for yourself than they have to be.

The bulk of the publicly-available libraries will work on the Uno because they were written for it (or its predecessors), whereas the Leonardo has a different processor on it. There will be some differences, in particular with libraries or sketches that try to directly address ports.

The thing is, if you buy a Leonardo and develop a sketch, and then try to program that same sketch onto a bread-boarded Atmega328 it may not work. You switched processors. Especially if you are a beginner I would stick to one chip, and for maximum support, library usage, etc. I would get a Uno.