Yes. I would typically approach it by parametising each aspect. Say the colour, length, width ect. Then you just throw in random numbers for the parameters. If you want reproducible you can specify a seed to start with.
The techniques get more and more complex as objects get more complex. But its still the same basic technique.
I would also start by letting the script know the typical transformations and aspects of the object it wants to represent. For example if it wanted to represent a sword, I would store the regular transformations and colours of a regular un edited sword. Then allow it to randomise things that you want it to change like size by using Random.Range, so that it makes the size random but keeps it within reasonable parameters… an elaborated version of BoredMormon’s answer i should think.