Machbar ist das.
Voraussetzung:
Alle Deklarationen zu deiner Oberfläche sind mit Variablen belegt. z.B.: statt BkColor-ListView = 0xFFAB00 verwendest du eine Variable $BkCol_ListView1 und je nach Skin wird diese belegt.
Wie übernimmt man den neuen Skin? - Tja, eine Funktion schreiben, die alle erforderlichen Werte setzt. In etwa so:
[autoit]Func _SetSkin($SKIN)
; Skin-Datei einlesen (am besten in Array)
; Werte für aufgerufenen Skin für jedes Control setzen
; z.B. GUICtrlSetColor($Label1, $Col_Label1) usw.
EndFunc
Das ist nur ein ganz grobes Bsp.
Die Skin Datei kannst du gestalten, wie du willst (INI, XML, TXT). Hängt davon ab, wie du am besten mit umgehen kannst. Ich würde aber nur dann eine eigene Datei für die Skins verwenden, wenn geplant ist, dass später weitere Skins hinzukommen.
Ansonsten ist es einfacher, alle erforderlichen Angaben im Programm zu führen.
Für Nicht-Windows-Eigene Grafikelemente (also Icons etc.) mußt du die erforderlichen Dateien auf jeden Fall separat mitliefern. Praktischerweise als Ordner IMAGES im Skriptverzeichnis. Kannst du ja einbauen, dass bei Programmstart auf diese Elemente geprüft wird, wenn nicht vorhanden, werden sie per FileInstall() installiert.