Do I really need to declare a default namespace or can I just use namespace everywhere in my code and it will be ok?
Defining a default namespace is just one option; it's completely ok to declare namespace and attach them to prefixes. You may as well use the new XQuery 3.0 notation:
Q{http://my.namespace.org/optional/path%7Dmy-function() ...
Hth, C.