I am hesitant to claim this is the way, or the best way, to visualize panel data like yours, but I can throw out a few suggestions.
You are looking at a (combined) correlation matrix and scatterplot matrix. Your primary concern is that any two variables are confounded with time. Of course, you can look at subsets of the data that hold time constant, but you'd need 20 pairs of matrices (or more in other cases) and that's just not workable.
A rather simple, and presumably workable, option would be to borrow the notion behind coplots (see also: coplot in R or this pdf) and examine these matrices in partially overlapping temporal strata. Since you have 20 years, three strata (1-10, 6-15, 11-20) seems doable.
library(car) # we'll need this package for enhanced scatterplot matrices
set.seed(1) # you need to set the seed to generate reproducible data
d = data.frame(country = rep(c("A","B","C","D","E","F","G","H","I","J"),each=20),
... )
round(cor(d[,3:8]), 2)
# gini total_trade intraEU_trade inward_FDI outward_FDI unemployment
# gini 1.00 -0.02 0.07 0.07 0.02 -0.07
# total_trade -0.02 1.00 -0.03 -0.01 0.06 -0.02
# intraEU_trade 0.07 -0.03 1.00 -0.04 0.02 -0.01
# inward_FDI 0.07 -0.01 -0.04 1.00 0.04 -0.01
# outward_FDI 0.02 0.06 0.02 0.04 1.00 -0.07
# unemployment -0.07 -0.02 -0.01 -0.01 -0.07 1.00
windows()
scatterplotMatrix(d[,3:8])

d.early = d[d$year<2011,]
d.mid = d[d$year>2005 & d$year<2016,]
d.late = d[d$year>2010,]
round(cor(d.early[,3:8]), 2)
# gini total_trade intraEU_trade inward_FDI outward_FDI unemployment
# gini 1.00 -0.07 0.14 0.08 -0.02 -0.15
# total_trade -0.07 1.00 -0.04 0.03 0.05 -0.04
# intraEU_trade 0.14 -0.04 1.00 -0.04 -0.04 -0.06
# inward_FDI 0.08 0.03 -0.04 1.00 -0.06 -0.07
# outward_FDI -0.02 0.05 -0.04 -0.06 1.00 -0.06
# unemployment -0.15 -0.04 -0.06 -0.07 -0.06 1.00
windows()
scatterplotMatrix(d.early[,3:8], main="2001 - 2010")

round(cor(d.mid[,3:8]), 2)
# gini total_trade intraEU_trade inward_FDI outward_FDI unemployment
# gini 1.00 -0.02 0.10 0.17 0.05 -0.02
# total_trade -0.02 1.00 0.07 0.05 -0.05 -0.12
# intraEU_trade 0.10 0.07 1.00 -0.01 0.10 -0.13
# inward_FDI 0.17 0.05 -0.01 1.00 -0.07 0.03
# outward_FDI 0.05 -0.05 0.10 -0.07 1.00 -0.12
# unemployment -0.02 -0.12 -0.13 0.03 -0.12 1.00
windows()
scatterplotMatrix(d.mid[,3:8], main="2006 - 2015")

round(cor(d.late[,3:8]), 2)
# gini total_trade intraEU_trade inward_FDI outward_FDI unemployment
# gini 1.00 0.04 -0.01 0.05 0.07 0.01
# total_trade 0.04 1.00 -0.01 -0.05 0.07 0.02
# intraEU_trade -0.01 -0.01 1.00 -0.03 0.07 0.04
# inward_FDI 0.05 -0.05 -0.03 1.00 0.12 0.05
# outward_FDI 0.07 0.07 0.07 0.12 1.00 -0.08
# unemployment 0.01 0.02 0.04 0.05 -0.08 1.00
windows()
scatterplotMatrix(d.late[,3:8], main="2011 - 2020")

Given that your concern is that both variables are changing over time, a different approach is just to control for time as a third variable. The correlation between two variables after having partialled out a third variable is the partial correlation. It is the correlation between the residuals of regressing each of the variables on the third. A scatterplot of the two variables after having partialled out the third is an added variable plot. It is the scatterplot of the two sets of residuals just mentioned. You can get matrices of both, just as usual. This is quite simple in your case.
d.pcor = lapply(d[,3:8], function(j){ resid(lm(j~d$year)) })
d.pcor = do.call("cbind", d.pcor)
d.pcor = as.data.frame(d.pcor)
names(d.pcor) = names(d)[3:8]
round(cor(d.pcor), 2)
# gini total_trade intraEU_trade inward_FDI outward_FDI unemployment
# gini 1.00 -0.02 0.07 0.07 0.02 -0.07
# total_trade -0.02 1.00 -0.03 -0.01 0.06 -0.02
# intraEU_trade 0.07 -0.03 1.00 -0.04 0.01 -0.01
# inward_FDI 0.07 -0.01 -0.04 1.00 0.04 -0.01
# outward_FDI 0.02 0.06 0.01 0.04 1.00 -0.07
# unemployment -0.07 -0.02 -0.01 -0.01 -0.07 1.00
windows()
scatterplotMatrix(d.pcor, main="added variable plots")

I want to note, however, that I think your situation is more complicated than just taking out the effect of time. Your data are confounded with time, but they are also non-independent in that they are nested within statistical units (i.e., countries here) that are repeatedly measured.
When dealing with longitudinal / panel data, it is common to make a 'spaghetti' plot. This is usually done for the response variable as a function of time. Note that the name is pejorative. I'm mixed about these, but I usually do make one, possibly with some augmentations, and in conjunction with other plots. (See also @NickCox's excellent answer to Visualising many variables in one plot, and Plotting and presenting longitudinal data, options?)
d.w = reshape(d, direction="wide", idvar="country", timevar="year",
v.names=names(d)[3:8])
rownames(d.w) = NULL
d.w = d.w[,c("country", sort(names(d.w)[2:121]))]
windows()
plot(0,0, col="white", xlim=c(1,20), ylim=range(d$total_trade), xlab="year",
ylab="total_trade", axes=FALSE, main="Spaghetti plot"); box()
axis(side=1, at=1:20, labels=paste0("'", sprintf("%02d", 1:20)), cex.axis=.7)
axis(side=2, at=seq(-10, 35, by=5))
for(i in 1:10){
lines(1:20, d.w[i,82:101], lwd=2, col=rgb(0,0,0,alpha=.5))
}

You have time-varying covariates, so you could make one of these for every variable, I suppose. However, you seem interested in the correlations / scatterplots of each of the different variables relative to each other. In which case, you could extend this idea to have 2-dimensional spaghetti plots:
spaghetti.in.2d = function(x,y){
plot(0,0, col="white", xlim=range(d[,x]), ylim=range(d[,y]),
xlab=x, ylab=y, main="2 dimensions of spaghetti")
for(i in 1:10){
xs = unlist(d.w[i,sort(grep(x, names(d.w)))])
ys = unlist(d.w[i,sort(grep(y, names(d.w)))])
points(x=xs[1], y=ys[1], col="red", pch=16)
arrows(x0=xs[1:19], y0=ys[1:19], x1=xs[2:20], y1=ys[2:20],
length=.05, lwd=2, col=rgb(0,0,0,alpha=.5))
}
}
windows()
spaghetti.in.2d("gini","total_trade")

I would make these individually, rather than a plot matrix, to have any hope of seeing anything in them. Lastly, I would note that you can't see anything in the plots I've made here because there is, in fact, no structure / information in the data as simulated—I don't know how informative the might be with your real data.