¿De qué forma se crean las extensiones para los programas?
Básicamente, si tu programa sabe "leer" esa extensión de fichero, funcionará. La extensión es un identificador, algunas son más extándar, pero nadie te quita de hacerte una extensión estilo ".gato" si te da por ahí, o hacer un software que te guarde las cosas como ".pdf" (lo cual no abrirá con Adobe Reader, pero sí con tu programa) por ejemplo.
¿Cómo puedo crear mi propia extensión y que mi programa interprete esa extensión como propia de dicho programa?
Una vez esté hecho tu programa para interpretar dicho tipo de extensión, es cuestión de asignar tu software como programa por defecto para abrirlo (en el caso de Windows, no sé como irá en los otros SO)
En Windows 10, ve a inicio y teclea "Aplicaciones predeterminadas"
¿Está limitado el número de caracteres de las extensiones o no?
20 caracteres
¿Se puede superponer la extensión al nombre del archivo para que salga por ejemplo: .exe o directamente exe sin el . y que no salga el nombre del archivo?
Creo que no, hasta donde sé, necesitas un nombre de fichero para que funcione
¿Se puede crear archivos con extensiones dinámicas, o sea, que cada X tiempo cambie la extensión de un archivo sin que haya un proceso cambiando las extensiones?
Siempre que tu software acepte el tipo de fichero, debería manejártelo. La cosa es como indicarle al software que ahora la extensión correcta de hoy es ".pepe" y no ".gato" y para mañana haya que usar ".invento"