The most common misreading of PHP 5.3 namespaces is that use is an import statement in the sense that Python or Java means it. It is not: it creates an alias, at compile time, in one file. Nothing is fetched, nothing is included, and a file with a correct use line and no autoloader still dies on the first new.
namespace ShopBilling;
use ShopCatalogueProduct;
$product = new Product(4417);
// the compiler now knows this means ShopCatalogueProduct,
// and then asks the autoloader for it exactly as it would
// for any class name it has never seen
What makes the two halves meet is a convention mapping a name onto a path, which is all PSR-0 is — and it is new enough this year that plenty of libraries still ship their own loader instead. The name arriving at your spl_autoload_register() callback is always fully qualified and always without a leading backslash, so the alias is gone by then and the callback only ever sees ShopCatalogueProduct. A class that cannot be resolved to a file under some rule cannot be autoloaded at all, no matter how carefully it is namespaced.