I think pretty much everything there is covered in some way or other.
Country/city/campus and probably building can be taken care of by using sites. You can either use the address fields for a site or create custom fields to specify city/country.
Campus buildings can be tied to a "region" (field whose values you can define) so you could create a region called "Campus A" and tie sites to it. Regions can also be nested, so if you wanted to you could also do "Country A"/"Campus A" and "Country A"/"Campus B".
You would then create a site for each building in each campus.
Room number and all those other details can be taken care of one of two ways:
1) custom fields created for racks, where you could populate this information when creating racks in the system
2) naming convention
We used a naming convention even before adopting netbox that allowed us to do pretty much all of this. It looks like this:
HD-01-05-XXYY-U42-DEV0009
where HD = the building ID code, 01 = floor number, 05 = zone (equivalent to a room for us) XXYY = X,Y coordinates on the floor layout grid (rack mounted items share same XXYY as parent rack), U42 = rack position, 00 if non-rackable, DEV0009 = 3 letter code for device type and unique identifier number.
I agree for circuits it's kind of weird, we just created a dummy device the circuits terminate to that "belongs" to the ISP, it's a non-racked generic device with network ports associated to a site that either has the ISP's business address or if we know the physical location of the termination point we put that address.