Possible to have variables in migration configuration?
Yes you can! However, depending on the plugin you are using, it might be picky about what you put in the variable. Here are two examples of variables being used in a migration config:

A file import

source:

  plugin: csv
  track_changes: true
  path: 'public://migration/csv/image_download.csv'
  header_row_count: 1
  keys:
    - image

  fields:
    image: 'Image'
    media_name: 'Media name'

  constants:
    uri_file: 'public://photos'

process:
  uri_file:
    -
      plugin: concat
      delimiter: /
      source:
        - constants/uri_file
        - media_name

  uid:
    plugin: default_value
    default_value: 1

  filename: display_name 

  uri:
    plugin: download
    source:
      - image
      - '@uri_file'


In the above, both constants/uri_file established in the "source" step of the migration, and uri_file passed as @uri_file to the download plugin in "process" step are variables. 

The documentation for the migrate_plus process plugin "merge" has another good example:

source:
     plugin: d7_node
   process:
     temp_body:
       plugin: iterator
       source: field_section
       process:
         target_id:
           plugin: migration
           migration: field_collection_field_section_to_paragraph
           source: value
     temp_images:
       plugin: iterator
       source: field_image
       process
         target_id:
           plugin: migration
           migration: image_entities_to_paragraph
           source: fid
     paragraphs_field:
       plugin: merge
       source:
         - @temp_body
         - @temp_images
   destination:
     plugin: 'entity:node'


In both these example, the vars are used in arrays. That's just what the plugin expects, not something inherent to using variables.