There shouldn't be any LINQ magic keeping you from doing this. Don't use projection though that'll return an anonymous type.
User u = UserCollection.FirstOrDefault(u => u.Id == 1);
u.FirstName = "Bob"
That will modify the real object, as well as:
foreach (User u in UserCollection.Where(u => u.Id > 10)
{
u.Property = SomeValue;
}