Answering my own question in case somebody has the same problems. My mistake was calling the .on() method after the widget initialization, while I should have called it before. From my understanding the script was unaware of any event handlers bound to the 'create' event when it was fired.
See this fiddle.
$.widget('pr.test', {
options: {
create: function(){
console.log('Called from within the widget');
}
}
});
// Binding to the event before it is fired
$('body').on('testcreate', function(){
console.log('Called from outside the widget');
});
$('body').test();
// Binding to the event after it is fired
$('body').on('testcreate', function(){
console.log('This will not work');
});