In a large skillet, cook the butter and onion over low heat until butter has melted. Add the flour and stir until smooth. Cook until bubbly and flour is no longer raw, about 2 minutes.
Whisk in the milk and chicken stock until there are no lumps remaining. Bring to a simmer, stirring frequently until sauce has thickened, about 5 minutes. Stir in the cheese until melted.
Add the ham, broccoli and carrots. Bring to a simmer, cover and cook for 5-7 minutes or until vegetables are softened. Season to taste with salt, pepper and a pinch of ground cayenne. Serve over cooked rice, pasta or toast.