I see nobody has replied to this in a few weeks, so adding some thoughts here below.
In my view - if you have the right licensing, you can consider auto-apply policies to automatically apply retention labels using any of the supported methods (i.e., based on SITs, keywords, document properties, trainable classifiers) to automatically apply labels to content. This method does not require the retention labels to be 'published' to sites and works without needing any end-user actions.
In case your licensing does not support the use of auto-apply methods, then manually applying labels may be the only option, in which case your labels need to be published to sites at which point any user who can contribute to content can pick/choose a label to apply to the content.
Training your end-users to work with retention labels may be the best way to go in this case. You may be limited if you're looking for a technical solution. Including some thoughts below on some technical options that could be explored if none of the above work for you, but you will likely have limited success or face limitations. Full disclosure - I have not tried any of these below myself and I wouldn't recommend any of these to be followed.
You have PnP PowerShell cmdlets that let you apply labels to containers (e.g., Libraries or Folders) or to individual items, however these only work for labels that are already published to the site and visible for end-users.
Other alternatives may include exploring whether the 'Apply Label' field could be hidden from Forms (others seem to have tried this already with limited success), or potentially a Power Automate flow to attempt to un-label the item or apply a generic label instead. Lastly, perhaps customizations in the form of a remote event receiver invoked on ItemUpdating to see if you can handle this scenario.
Hope this helps!