Please excuse my ignorance, but several types in D do not currently translate well into C.
For example, strings in D are not '\0' terminated, which breaks with C. This is not usually a problem, and it's easy to wrap the function in the translated header file to automate that particular process. It seems that your proposal would disallow this particular example. The translation code would have to be somewhere, what is the argument against allowing it? In my (admittedly ignorant) opinion, it seems that allowing the automatic translation of D types to C types would fit very well, otherwise you'll have to add them yourself every time you wish to call C. Forgive me If I have misunderstood something.