I think #2 should actually read: "Only include headers in headers if you can't get away with forward declarations"
Hence the "Sometimes you'll need to deviate from these rules, but in the rare occasion that you do, you'll know." It's very rare that you can't get away with forward declarations.
Short of putting all headers in one huge header file, how can #2 be accomplished? Not trying to be a wiseguy - I'm not well-versed in C++ and would honestly like to know.
As madhed mentioned above, forward declarations. If header 2 contains a "Foo" class that you need to reference in header 1, just declare class foo; at the top of header 1. If cpp file 1 includes header 1 AND header 2, the linker will take care of it.
Its quite common to #include headers in header files. Manual creation of forward declarations is gonna lead to lots of subtle errors as you now have your dependencies spread across many files. Just use #pragma once at the top of every header file, include it where needed, and you won't have issues. As far as #pragma once being non-portable, I know of no remotely modern C++ compiler that doesn't support it (http://en.wikipedia.org/wiki/Pragma_once#Portability).