You have a lot of questions here, so I'm going to do my best to answer all of them.
For your first question: the Fibonacci heap is implemented as a collection of trees all linked together in a circularly, doubly-linked list. When the insert function is asking you to concatenate x with root list H, it's asking you to take a singleton node you've created (x) and wire it in to the circular, doubly-linked list of all the existing trees H.
For your question about extract-min, there is an error in your pseudo code. The test
x <> NIL
Should be
z <> NIL
x isn't defined at that point in the function, so there's no way that this code could possibly work as written.
As to how the heap property is maintained: each individual tree in the Fibonacci heap individually obeys the heap property. When CONSOLIDATE is called, multiple trees can be merged back together into individual trees. This is where the heap property is maintained. When merging together two trees, the Fibonacci heap always takes the tree with the greater root value and makes it a child of the root of the tree whose root has the lesser value. That way, the resulting tree obeys the heap property.
Finally, Dijkstra's and heaps: Dijkstra's algorithm with a heap-based priority queue takes time O(m log n) to complete, while a Fibonacci-heap backed Dijkstra's takes O(m + n log n), which is asymptotically faster for sparse graphs. However, in practice, Fibonacci heaps tend to be slower than binary heaps due to higher constant factors hidden in the big-O terms, both because the implementation is so much more complicated and because they have worse locality of reference. The binary heap version of Dijkstra's, however, is dramatically faster in theory and in practice than a linked-list or sorted-array backed version of Dijkstra's.
Hope this helps!