This is actually a C/C++ question, not a Vulkan-specific question. After the assignment bar = foo, both variables will refer to the same fence. I.e., yes, both variables will always reflect the same state after that assignment.
Well, “handle” is a Vulkan concept (and many other APIs too though). But if you imagine a “handle” is a pointer, or an index into an array, then it is a C++ question.
Would need superwide screens with such names. If it has to be created, then it is a handle, where the driver holds the impl. If it is plain struct (such as VkExtent2D) then it is just struct. If you do not like it, you can always alias\typedef it to some hungary notation or something like hVkFence. It is not that unclear though. Its definition is VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkFence).
PS: Alternatively you could use Vulkan-Hpp. It might have a different semantics. Vulkan objects are typically non-copyable, so it might have only move semantics and deleted copy constructors and assignments.