Subquery - return new row and only fill one column
Only way to format like that is to UNION the queries:

DECLARE @GetInstances TABLE 
  ( 
     value         NVARCHAR(100), 
     instancenames NVARCHAR(100), 
     data          NVARCHAR(100) 
  ) 

INSERT INTO @GetInstances 
EXECUTE Xp_regread 
  @rootkey = 'HKEY_LOCAL_MACHINE', 
  @key = 'SOFTWARE\Microsoft\Microsoft SQL Server', 
  @value_name = 'InstalledInstances' 


SELECT Serverproperty('ServerName') AS [Server], 
       (SELECT Server_type = CASE 
                               WHEN virtual_machine_type = 1 THEN 'Virtual' 
                               ELSE 'Physical' 
                             END 
        FROM sys.dm_os_sys_info)
       AS [Virtual/Physical], 
       CAST((SELECT ( cpu_count / hyperthread_ratio ) 
        FROM   sys.dm_os_sys_info) 
        AS VARCHAR(10))
       AS  [CPU(s)], 
       CAST((SELECT CASE 
                 WHEN hyperthread_ratio = cpu_count THEN cpu_count 
                 WHEN ( ( cpu_count - hyperthread_ratio ) / ( 
                        cpu_count / hyperthread_ratio ) 
                      ) = 0 THEN 1 
               END  
        FROM   sys.dm_os_sys_info) 
         AS VARCHAR(10)) AS [Core(s)], 
       Substring ((SELECT @@VERSION), 1, Charindex('-', (SELECT @@VERSION)) - 1) 
       AS [Product Name], 
       Serverproperty('ProductVersion') AS [Product Version], 
       Serverproperty('ProductLevel') AS [Product Level], 
       Serverproperty('Edition') AS [Edition] 

UNION ALL

SELECT '', instancenames, '', '', '', '', '', ''
FROM   @GetInstances 


We return blank strings '' for most columns in the second query as both queries must have the same number of columns. Note I've also CAST [CPU(s)] and [Core(s)] columns in the top query to VARCHAR, otherwise the second query returns 0 in those columns ('' cast to INT = 0).