Jiri Valenta is 100% correct that they best way to do this is to move all scrip1.sh functions into a separate file, e.g.,
script1_functions.sh # move all functions from script1.sh to here
script1.sh # sources script1_functions.sh and executes commands
script2.sh # sources script1_functions.sh and executes other commands
However, what if script1.sh is outside of your control (e.g., vendor code). In that case, copy-pasting the functions into script2.sh seems like a good idea. However, script1.sh might get modified in the future (a safe assumption), and you might want script2.sh automatically use the modified functions.
But IMO, it's more efficient to work around than to solve this type of problem. Here is an example of such a not-worth-the-trouble solution: get the md5sum of current script1.sh and verify that it is the same at the start of script2.sh. If not, give a warning or error (and maybe abort script2.sh) that script1.sh has changed, so someone needs to review the changes and update either script2.sh code, or script2.sh's md5sum of script1.sh if a code review determines no changes are needed.