The problem with the substitution strategy is that there is no guarantee that the players meeting #1 in round 1, #2 in round 2, etc... are all distinct, in other words player 17 will end up meeting some players twice. You may well be able to live with this, but substituting a second time to create an 18 player schedule will most likely make a mess of things.
In general combinatorial texts are only likely to give plans for more symmetric problems like the 16 player social square. For the 17, 18 and 19 player schedules mentioned, the number of matches per player varies. Since there are so many more of these asymmetric problems, it usually means that they have not been considered as a combinatorial problem and, as I think you suspect, comupter optimization is probably the best way forward.
I have a way of optimizing pairs within foursomes, which will work provided that people are never required to meet the same person twice, either as partner or opponent. This requirement simplifies the problem since partners and opponents do not have to be considered separately. For example I can find the solution below for 19 players (A to S), 4 courts and 6 rounds.
Court 1 Court 2 Court 3 Court 4 Byes
(I M B R) (G J Q H) (E D C O) (P A K S) [F L N]
(N I O J) (H R D S) (A C M G) (F Q L E) [B K P]
(O G S B) (H L A N) (R P Q C) (M F J K) [D E I]
(D A I Q) (B H P F) (S J C L) (R N E K) [G M O]
(N G F D) (C K H I) (J B E A) (L O M P) [Q R S]
(P E G I) (Q S N M) (K L D B) (A O R F) [C H J]
A is the only person to play in every round and meets all 18 other players, B to S have one bye each meeting 15 out of the other 18 players. As before, you can assign the foursomes to partners and opponents in any way.