Firstly, just in case there might be a misunderstanding I want to make you aware that the list view threshold relates only to how many items you can display/query in a list view, not how many items you can store in the list. The maximum number of items you can store in a list is 30 million. See official article here.
Secondly, I recommend changing your list view threshold from 40k back to the default 5k, and use folders and list views with indexed columns to be able to view the items in the list.
Thirdly, if you still want to move items in various lists for other reasons than avoiding the list view threshold, then there is no out-of-the-box way to do it other than exporting the list as a template which can be tricky and messy when executed on large lists.
Proposed Solution
What I have done in the past was to create new lists that have the exact same columns and settings as my old list. Then I wrote a PowerShell script that looped through the existing list's items and created them in the new lists. Once the new lists have been populated with items, I deleted them from the old list.
In some scenarios, I used PowerShell scripts to move the items from the root folder of the list into sub-folders in the same list.
You can of course write the same logic in C# using the server-side object model or client-side object model; you don't have to use PowerShell.
Careful with moving items from one list to others if you use the list items IDs as identifiers (e.g. use ID as employee number in the Employees list) because once items get moved, they will have different IDs.