I'll try to answer a few of your questions. Others on the forum will have more info.
The "wiring language" isn't really a separate language. For practical purposes, it's C (or basic C++) with some libraries and headers added. If you are comfortable programming in C, then you already know 99% of wiring. The Arduino environment provides constants, wrappers and libraries to conveniently access the hardware resources. For the most part, this is really convenient, because all you have to do is open up the IDE and start coding.
That being said, there are times when the Arduino/wiring language gets in the way, and you are better off using lower-level coding. However, there's nothing to prevent you from doing that using the arduino environment, you just have to dig under it a little. The IDE is very convenient, even if the coding you are doing is more advanced than what it supports.
Note that the IDE is implemented on top of the AVR-GCC tool chain. That means with a little more work you can compile and load from the command line. There's a link on the arduino page somewhere about doing just that.
As for compatibility, that's a little bit constrained at the moment. Arduino supports ATMega 8/16 chips directly. It's been ported to some other chips which are not supported by the main software yet. Search the forum for posts about porting. Taking a program from Arduino to another AVR chip isn't TOO difficult, but you might have to massage the code somewhat, because the underlying hardware is different.
One resource that you might be interested in is AVR freaks http://www.avrfreaks.net/
They cover a broader range of chips than just the arduino stuff. AVRfreaks is a valuable resource even for arduino users. They also talk about the various compilers and tools that can be used with AVR chips.
Hope this helps,