Well, the fact that many assemblers are written in C doesn't necesarily mean that C is closer to the computer, it just means that many people find C to be better suited and easier to use for writing such things as operating systems, compilers and assemblers. By all means, you could write assemblers in perl if you'd like, and perl is nowhere near as close to the raw metal as C is.
The thing is that C is a semi-high level language with constructs such as loops, if-statements, complex datatypes and so on. In assembly you have to create such things yourself using eg. jump-instructions.
Every instruction in assembly normally corresponds to one instruction in the processor. This is not at all the way that C works (as you probably know). This means that you normally have to write much more code in assembly to get what you want done and you have to be much more aware of details in order not to shoot yourself in the foot. However it also means that you have far greater control of every detail in the program.
Sometime this is what you want, (I would say) most times it isn't.