Currently, VirtualTables can only handle Literals. However, VirtualTables can actually handle Expressions as well, and Literals are being deprecated:
// A table composed of expressions.
message VirtualTable {
repeated Expression.Literal.Struct values = 1 [deprecated = true];
repeated Expression.Nested.Struct expressions = 2;
}
from here.
Substrait-java should be able to handle Expressions.