No, not all apps would have a "move to SD" button. System apps never do, and for the rest it's up to the developer whether they allow that. It's also only a partial fix: it only moves a part of the installed app, and doesn't move the app's data. But that's the option that's provided by your OS, and I wasn't sure until you replied whether it even had that (it was officially deprecated several releases ago, so many devices don't have it at all).
The manufacturer made a stupid choice when partitioning the storage, one that mainstream android has not used since 2011. But there is no simple trick to do what you are asking for. That would require rooting the device and doing some serious messing about (that's "serious" as in "easy to mess the device up completely if you get it wrong"). The "simplest" would be to alter the mount points so that the OS thinks the emulated "internal SD" is the "external SD" and vice-versa. If you want to try stuff like that it's important to understand what you are doing first, not just type a set of commands blindly, as you don't want to mess it up.
When you ask about "contacts", what is it you want? You can back up contacts by going into the contacts app & selecting import/export from the app's settings - this will write your contacts to a vcard file which gives you a backup you can copy anywhere you like. You can't however move the working contacts database file out from the /data partition - that would be the same as deleting the contacts as far as the device is concerned.