Note: when I say "Visual Basic" here I mean Visual Basic 6 and before - not Visual Basic.NET.
Visual Basic is designed to be easy to use. Pointers are hard - and to some extent, so are reference types, like the ones used for objects in most modern languages.
the Set
syntax is a way to hide this:
Set foo = Bar() 'Treat foo as reference variable
foo = Bar() 'Treat foo as a value variable
So, people that don't understand references can use objects like value variables, which are easier to grasp. Given that Visual Basic is usually used with the Visual Studio form designer to create GUI applications, you can do quite a lot without using references.
VBA and VBS usually require more reference usage(in VBA you usually need to use Office objects, and in VBS you usually need to use COM objects to interact with Windows), but their syntax still needs to follow the Visual Basic one so they also require the Set
syntax.