You should be aware that while FEniCS follows an elegant symbolic approach, the underlying data structures for the matrices and vectors are in most cases still accessible. When you work through the tutorials this is explained in some detail. That being said, you never really need to have access to the basis functions for basic tasks. This is something which you may only need if you consider writing non-standard assemblers, e.g., for stabilizations which cannot be formulated using the UFL of for implementing things like limiters, postprocessings, etc..
Regarding your questions:
a) yes, the CG1 is simply the space of continuous piecewise linear functions. Boundary conditions are treated by adding the additional constraints in the assembly stage.
b) if you just want to obtain the entries of the mass matrix, why don't you just compute it using the usual workflow, i.e., assemble the form u*v*dx
(u and v are trial and test functions, respectively) into a sparse matrix M and extract the components from there? You don't really need to have access to the local function spaces for that, neither do you have to assemble these integrals individually. Of course, you can create hat functions and compute the global integrals using assemble, but this is extremely inefficient compared to assembling everything in one sweep.
c) looks like you just want to access the components of an interpolation. This can again be done by accessing the underlying vector of a function.
I don't have FEniCS on the machine where I am writing this, but given these pointers you should be able to search for help. Everything I said above was covered in this Q&A sometime and some basic things like matrix assembly etc. are treated in the respective lessons of the tutorial.