You can make a parcellated file containing junk values, and then replace
its data with values you have already calculated, look at
-cifti-convert , specifically the -from-text option. You could also load a parcellated cifti file into python with nibabel and do the replacement there, without writing an intermediate text file.
If you have a file where all the vertices or voxels in a parcel have the same value already, then averaging across the parcel should give you the same value, so it isn't clear to me what the issue is there. dlabel files are dense on their spatial dimension, not parcellated (so you can change the label boundaries with standard data-modification commands, rather than parcellated-specific commands).
The Schaefer dlabel file, judging by its dimensions, is likely vertex-based, not voxel based. To convert it to a parcel map in python, you'd need to loop through the indices, translate them to vertex and structure, grab their values from the dlabel's data, and create the parcel definitions from those keys - I would recommend running -cifti-parcellate with the dlabel (on itself, if nothing else is handy) to skip the need to write that custom code.
Tim