The dataset.py:dict_source creates the all_labels and label_arr variables because it allows the regression problem formally to be treated like a classification problem. Instead of having to write a bunch of new code to specifically support regression tasks, fast.ai just transforms the regression data into a format that resembles a classification data and uses the already existing code. This was done I am pretty sure for convenience of implementation (this makes sense, after all the classification code is already very well debugged). Is that what you were asking?
Why regression values in the range of [0,1] are worse compared to [0,1000] is an interesting question. I assume you ran the learning rate finder and chose a suitable learning rate for both cases individually? And the shapes of the learning rate curves looked reasonable in both cases?