Peel the onion and cut into large chunks. Peel the garlic cloves, you can leave them whole.
Put the onions and garlic on a sheet pan. Drizzle with the olive oil and sprinkle with pinch of salt and pepper. Toss to coat. Roast them for 25-30 minutes or until they are nice and brown and caramelized. Remove from the oven and let cool for a few minutes.
Now, cook the pasta according to package directions. Drain when the pasta is al dente.
Once the onions and garlic have cooled a little, put them in a food processor. Puree them until they are a pretty smooth paste. Set aside.
Now, start the cheese sauce. In a large pot, heat the vegan butter on medium.
Once the butter has melted, add the flour and whisk to combine and form a roux. Simmer for 1-2 minutes.
Then pour in the non-dairy milk and a pinch of salt and pepper. Whisk to combine and make sure there are no lumps.
Bring to a simmer, then reduce heat to medium low. Simmer until the milk starts to thicken. About 2-3 minutes. Whisking constantly.
Then add the vegan cheeses. Whisk to combine and continue to whisk until the cheeses have melted.
Season with another pinch of salt and pepper.
Once the cheese sauce is nice and smooth, add the pureed onions and garlic and stir to combine.
Add the pasta to the pot with the cheese sauce and toss to combine. Taste and adjust seasonings.
Serve immediately with extra vegan Parmesan if desired.
Notes
*I used a combination of cheddar and mozzarella style, but you can use any combination you want.