You can create custom keyboard layouts using Microsoft Keyboard Layout Creator program - for free! Just search for it … anywhere, really. You will be able to define your layout, test it, and then create the DLLs and setup program, all in one program.
MSKLC lets you define dead keys - a key that will only output its “normal” character if the next key pressed doesn’t make a special combination. For example, my default keyboard is the US-International keyboard. When I type a quotation mark, the computer does not actually output the quotation mark until I’ve pressed another key, because if I type a vowel or “y”, it will give me a precomposed letter + diaeresis, ie, "q "w ë "r "t ÿ ü ï ö "p, ä "s "d "f &c. It doesn’t usually get in the way, but every once in a while, I have to change a quotation starting with the indefinite article a tweak: Ä to "A, by typing quote + space + A.
I have also defined a REALLY international keyboard that defines some dead keys on the upper right of the keyboard as selecting a foreign script, e.g. "" = greek: θωερτψυιοπ, ασδφγηςκλ, and ζχξϝβνμ̀; “]” = cyrillic: щшертчуиопъыь, асдфгйжкля, and зхцвбнмэҩє; “}” = hebrew; “|” = devanagari; AltGr (right Alt or Ctrl+Alt) + “]” = cherokee; AltGr + "" = arabic; “=” = hiragana, “+” = katakana. I also have the shift + number symbols as dead keys, which select IPA and some odd diacritics. My braille layout is AltGr + “q w e r a s d f” for each half of the sign, with the shift key for the bottom dot. All these keys have a normal semantic, with my AltGr keys as ƣƿə®þʊȣɩœ¶, æßðȝɣƕʒĸƛ, and ɂʃ¢ʌƅŋµ. I figure that I have used up about 1700 of the dead key combinations, out of a possible 35k using only shift, AltGr, and Shift+AltGr.
A couple of notes: with MSKLC you have to define a default character for a given key in order to define dead key combinations for that key. You will get a warning that your dead key combinations should have space returning the default character, but I find that I want my punctuation-marks-as-dead-keys to interpret a following space as an actual space, and you can choose to ignore that particular warning. The characters accessed by dead keys must be a single UTF-16 code point, so if a particular language has an “H” with acute, along with its vowels, the vowels can be accessed as the single characters á,é,í,ó,&ú with the dead key acute + a, e, i, o, u, but the h́ will have to be an “h” followed by a combining acute, which I have defined as apostrophe + shift-space. This also means that characters outside the Unicode BMP cannot be accessed by dead key.
All this is to say that there is a simple program that enables you to do exactly what you want, provided you and your audience are running windows.