No, if you remove the defined() call and just include it will fail to find the class. Defined() is there simply to ensure that we can do the include. For a bit more context I've written an abstraction layer that assigns apps/roles to nodes and will pull in profiles if they exist, that is where this snipit is from.
So changing this to:
if ($profile == 'existantclass') {
include "profile::${separator}::${profile}"
}
results in Error 400 on SERVER: Could not find class profile::app::existantclass for node1.vnet on node node1.vnet.
Me and defined() have had a rocky but ultimately agreeable relationship.