Using sp_executesql you can send an output parameter to your dynamic query.
DECLARE @sqlCommand NVARCHAR(MAX);
DECLARE @dateEnd DATETIME;
SET @sqlCommand = '
          select top 1 @retVal = datetime 
          from IntradayHistory.dbo.IntradayDataHistory' + @product + ' 
          where TickerID = ' + cast(@ticker as nvarchar(24)) + ' 
          order by datetime desc
';
EXECUTE sp_executesql @sqlCommand, N'@retVal DATETIME OUTPUT', @retVal=@dateEnd OUTPUT;
SELECT @dateEnd;
Option B:
You can use temp table to store the result of dynamic query.
DECLARE @sqlCommand NVARCHAR(MAX);
SET @sqlCommand = '
      select top 1 datetime 
      from IntradayHistory.dbo.IntradayDataHistory' + @product + ' 
      where TickerID = ' + cast(@ticker as nvarchar(24)) + ' 
      order by datetime desc
';
CREATE TABLE #temp1 (Result DATETIME);
INSERT INTO #temp1 EXEC (@sqlCommand);
SELECT * FROM #temp1;