ja, genau so ist das bei Arduino, das sind spezielle Konventionen.
Was aber die grundsätzlichen Anforderungen an #include-te .h oder .cpp Files angeht, das ist bei Arduino absolut C++- standardgemäß, das hat Ceos ja bereits geschrieben:
c ist nun halt mal so aufgebaut dass es gewisse regeln gibt damit der compiler es eineindeutig verstehen kann ... und das trägt auch der lesbarkeit zu ... wenn alle variablen in den entsprechenden header files des jeweiligen modul liegen und dabei sogar noch sauber zwischen public und private headern sortiert gearbeitet wird, ist es unmöglich mal "zufällig" den selben variablennamen mit unterschiedlichen typen zu deklarieren, denn jede c datei eines moduls inkludiert nur die public und die private header die für die verwendung notwendig sind!

in richtigem c++ sind variablen in den klassen zu deklariern und wenn man mal eine globale variable braucht, sollte man eine klasse darum wrappen und mit sog. singelton (oder statisch) arbeiten ...
man kann c++ und c mischen aber das ist grausig und führt zu nebeneffekten

PS zu deinem PS: Include Guards für C++ sind aber der absolute Standard in jeder IDE soweit mir das bekannt ist