Is it possible to add an existing IP variant to a Platform Designer/Qsys system through TCL?
You can definitely do this.

In much the same way as you create TCL files for your HDL IP cores, you can do the same for instantiating systems. The only difference is that instead of using the ELABORATION_CALLBACK, you use the COMPOSITION_CALLBACK option.

If you build a system in the GUI, there is an option to export a _hw.tcl file which is basically what you describe. You can then edit that TCL file however you please, or use it as a template for other systems.

For a simple example, this is a TCL file that defines a system that instantiates another component called bob. It also shows how you can export interfaces, define and use parameters, log messages, etc. 

It is also possible to instantiate more than one module and connect them together. Essentially anything you can do in Qsys GUI, you can do in a TCL file, plus a lot more.

# Module properties
set_module_property NAME MySystemName
set_module_property DISPLAY_NAME "My System"
set_module_property VERSION {1.0}
set_module_property GROUP "System"
set_module_property DESCRIPTION "Im am very descriptive!"
set_module_property AUTHOR "Me"
set_module_property COMPOSITION_CALLBACK compose
set_module_property opaque_address_map false 

# Any parameters you may want
add_parameter myParameter BOOLEAN false
set_parameter_property myParameter DISPLAY_NAME "Select me if you dare"
set_parameter_property myParameter HDL_PARAMETER false
set_parameter_property myParameter AFFECTS_GENERATION true

# Composition callback
#  This is where you instantiate submodules
proc compose { } {
    set myParameter [get_parameter_value myParameter]
    if {$myParameter} {
        send_message info "Hello, World!"
    } else {
        send_message error "Nope!"
    }

    # Instantiate a component called "bob"
    add_instance myBob bob 1.0
    set_instance_parameter_value myBob bobsParameter valueForBobsParameter

    # Exported interfaces 
    add_interface bobsClock clock source
    set_interface_property bobsClock EXPORT_OF myBob.clock
}